簡體   English   中英

如何在保留冗余值的同時將元組列表轉換為字典?

[英]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

werkzeugpaste都提供multidict實現。 選一個,然后使用它。

像這樣?

 >>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM