Python 将列表中的内容合并到嵌套词典中
在text.txt中是:Python 将列表中的内容合并到嵌套词典中,python,list,dictionary,text,mergesort,Python,List,Dictionary,Text,Mergesort,在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:
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])
反复浏览您的ns列表。对于每个条目,检查第一个值是否不是dic中的键。如果不是,则在该键下向dic添加一个空列表。然后,将条目中的第二个值附加到dic中的列表中
for l in ns:
if l[0] not in dic:
dic[l[0]] = []
dic[l[0]].append(l[1])
这是注释(+1)中@Ch3steR注释的
defaultdict
的完美用法:
输出
> python3 test.py
defaultdict(<class 'list'>, {'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']})
>
> python3 test.py
{'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']}
>
输出
> python3 test.py
defaultdict(<class 'list'>, {'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']})
>
> python3 test.py
{'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']}
>
要获取通用的指令
。但是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})})
>>>
>x=defaultdict(lambda:defaultdict(int))
>>>x['squirrel']['nuts_found']+=1
>>>x
defaultdict(,{'squirrel':defaultdict(,{'nuts_found':1})
>>>
这是注释(+1)中@Ch3steR注释的defaultdict
的完美用法:
输出
> python3 test.py
defaultdict(<class 'list'>, {'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']})
>
> python3 test.py
{'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']}
>
输出
> python3 test.py
defaultdict(<class 'list'>, {'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']})
>
> python3 test.py
{'Tommy': ['1200', '3200', '2190', '3460'], 'Sally': ['1500', '2900'], 'Ricky': ['2030']}
>
要获取通用的指令
。但是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})})
>>>
>x=defaultdict(lambda:defaultdict(int))
>>>x['squirrel']['nuts_found']+=1
>>>x
defaultdict(,{'squirrel':defaultdict(,{'nuts_found':1})
>>>
你的text.txt文件中的'Jack'和所有'G*'值在哪里?你是如何得到的'G2'、'G5'…
这些甚至都不存在的.txt
文件你显示了问题!让我改变这个@抱歉,我弄错了。你可以在这里使用defaultdict
new=defaultdict(list)
;新增[k]。追加(v)应该这样做。文本中的“Jack”和所有“G*”值在哪里?您是如何获得的“G2”和“G5”…
这些甚至都不存在的.txt
文件您显示了问题!让我改变这个@抱歉,我弄错了。你可以在这里使用defaultdict
new=defaultdict(list)
;新增[k]。追加(v)应该可以