【发布时间】:2020-03-01 11:41:42
【问题描述】:
如果我有一个 txt 文件:
apple:fruit
banana: fruit
carrot: vegetable
lettuce: vegetable
我怎样才能得到一本字典:
{fruit:[apple, banana], vegetable: [carrot, lettuce]}
提前谢谢你!
【问题讨论】:
标签: python dictionary text-files
如果我有一个 txt 文件:
apple:fruit
banana: fruit
carrot: vegetable
lettuce: vegetable
我怎样才能得到一本字典:
{fruit:[apple, banana], vegetable: [carrot, lettuce]}
提前谢谢你!
【问题讨论】:
标签: python dictionary text-files
file = open("text.txt", "r")
lines = file.readlines()
dict = {}
for line in lines:
try:
dict[line.split(":")[1].strip()].append(line.split(":")[0].strip())
except:
dict[line.split(":")[1].strip()] = [line.split(":")[0].strip()]
我希望这可以帮助你下次在你对你的问题进行更多研究并自己尝试一些代码之前,这样你就可以了解更多关于编码的知识:))
【讨论】:
尝试使用:
with open('file.txt', 'r') as f:
lines = [line.rstrip().split(': ') for line in f]
print({k: [line[0] for line in lines if line[1] == k] for _, k in lines})
【讨论】:
使用集合defaultdict 维护列表。
from collections import defaultdict
res_dict = defaultdict(list)
with open('file.txt', 'r') as f:
for line in f:
value, name = line.rstrip().split(':')
res_dict[name.strip()].append(value)
【讨论】:
创建自己的字典子类相当容易。除了不需要import 之外,使用defaultdict(list) 的另一个优点是它可以像普通字典一样打印。
class Vividict(dict):
def __missing__(self, key):
value = self[key] = list()
return value
vividict = Vividict()
with open('fruits.txt') as file:
for line in file:
name, kind = line.replace(':', ' ').split()
vividict[kind].append(name)
from pprint import pprint
pprint(vividict, width=40)
输出:
{'fruit': ['apple', 'banana'],
'vegetable': ['carrot', 'lettuce']}
【讨论】: