在text.txt中为:
Tommy 1200
Sally 1500
Ricky 2030
Tommy 3200
Sally 2900
Tommy 2190
Tommy 3460
我想将内容合并到字典中,因此结果将类似于:
{'Tommy':[1200,3200,2190,3460],
'Sally':[1500,2900],
'Ricky':[2030]}
到目前为止是我的代码:
dic = {}
name_score = []
with open('text.txt','r') as f:
lines = f.readlines()
for line in lines:
line = line.strip().split(' ')
name_score.append([line[0],line[1]])
print(name_score)
输出:
[['Tommy', '1200'], ['Sally', '1500'], ['Ricky', '2030'], ['Tommy', '3200'], ['Sally', '2900'], ['Tommy', '2190'], ['Tommy', '3460']]
我做了进一步尝试,但是事情对我来说太混乱了。我可以帮忙吗?
遍历您的ns列表。对于每个条目,检查第一个值是否还不是dic中的键。如果不是,请在该键下向dic添加一个空列表。然后,将条目中的第二个值附加到dic的该列表中。
for l in ns:
if l[0] not in dic:
dic[l[0]] = []
dic[l[0]].append(l[1])
这是defaultdict
的完美用法,用作注释(+1)中的@ Ch3steR注释:
from collections import defaultdict
name_score = defaultdict(list)
with open('test.txt') as file:
for line in file:
name, score = line.strip().split()
name_score[name].append(score)
print(name_score)
输出
> python3 test.py
defaultdict(<class 'list'>, {'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']})
>
A defaultdict
可以像字典一样使用。如果defaultdict(<class 'list'>
东西在输出中困扰您,则可以在dict
上调用defaultdict
:
print(dict(name_score))
输出
> python3 test.py
{'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']}
>
要获取通用dict
。但是Pythonic要做的只是使用defaultdict
,而不会被它的打印方式所困扰。
[有一些技巧可以对通用dict
做大致相同的事情,例如使用setdefault()
但defaultdict
很清楚,并且是一种很好的理解方法。而且您可以用它做一些疯狂的事情,例如defaultdict(lambda: defaultdict(int))
-自动创建的整数字典的字典!
>>> x = defaultdict(lambda: defaultdict(int))
>>> x['squirrel']['nuts_found'] += 1
>>> x
defaultdict(<function <lambda> at 0x10c285b80>, {'squirrel': defaultdict(<class 'int'>, {'nuts_found': 1})})
>>>