![](/img/trans.png)
[英]How do i turn a list with multiple values into a dictionary with only 2 values?
[英]How do I turn a list of tuples into a dictionary while keeping redundant values?
我得到的數據集格式化為鍵值對列表。 關鍵是數據源,值是數據元素。 例如:
[('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
我想把這個列表變成字典。 我可以使用Python的內置dict()
,但它會拋棄冗余值並僅保留與給定鍵關聯的最后一個值。 我想將冗余值放入列表中,如下所示:
{'a': [3, 7],
'b': [5],
'c': [15],
'd': [12]}
有一個簡單的方法來做上述事情嗎? 我認為必須有,但我似乎無法通過谷歌找到正確的提示。
您可以使用字典的setdefault()
方法:
d = {}
for key, value in my_list:
d.setdefault(key, []).append(value)
這也可以使用defaultdict
完成。 這兩個選項中哪一個更可取決於d
在其余代碼中的使用方式。 defaultdict
永遠不會給你一個KeyError
,因此它可能會隱藏代碼中的錯誤。
collections
模塊中的dict
子類defaultdict
可用於在您第一次訪問時自動初始化每個鍵的新list
。
有了它,您只需循環輸入對並將每個值附加到相應鍵的list
中,以生成所需的值列表。
import collections
data = [('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
result = collections.defaultdict(list)
for key, value in data:
result[key].append(value)
print result
defaultdict(<type 'list'>, {'a': [3, 7], 'c': [15], 'b': [5], 'd': [12]})
print result['a']
[3, 7]
print result['z']
[]
def multidict(lst):
result = collections.defaultdict(list)
for key, value in lst:
result[key].append(value)
return result # or dict(result) if you don't want to keep defaultdict
from collections import defaultdict
l = [('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
d = defaultdict(list)
for k, v in l:
d[k].append(v)
print d
請參閱此處的第一個示例: http : //docs.python.org/release/2.5.2/lib/defaultdict-examples.html
像這樣?
>>> d=[('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
>>> f={}
>>> for k,v in d:
... f[k]=f.get(k,[])+[v]
...
>>> f
{'a': [3, 7], 'c': [15], 'b': [5], 'd': [12]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.