[英]Python: transform list of tuples in dictionary
想知道是否有更慣用的(pythonic)方法。 我有一個游標對象返回的元組列表,並且我試圖將數據重新組合到字典中。 我得到的數據的格式如下:
[("Département d'informatique", 119, 74, 193),
("Département d'informatique", 193, 67, 260),
("Département de chimie", 355, 44, 399) ... ]
請注意,各部門重復進行。 具有相同部門的每一行代表不同類型的數據。 我需要在包含鍵(部門名稱)的字典中重新組合該數據,並且該值將是該部門作為其第一位成員的所有元組的列表。 所以像這樣:
{ "Département d'informatique": [(119, 74, 193), (193,67,260) ...] }
這是我的代碼。 目前,它正在運行,但是我不確定這是否是最高效/最高效的方法。
def preparer_donnees(data):
ret = { ligne[0] : [] for ligne in data }
for ligne in data:
for entree in ligne[1:]:
ret[ligne[0]].append(entree)
return ret
謝謝!
我會使用collections.defaultdict
:
def preparer_donnees(data):
from collections import defaultdict
ret = defaultdict(list)
for v in data:
ret[v[0]].append(v[1:])
return ret
您可以使用嵌套列表理解:
{line[0] : [tup[1:] for tup in data if tup[0] == line[0]] for line in data}
如果所有元組都包含4個元素,則可以打開元組的包裝:
my_d = {}
for k, v1, v2, v3 in l:
if my_d.get(k):
my_d[k] += [(v1,v2,v3)]
else:
my_d[k] = [(v1,v2, v3)]
您可以使用字典的“ setdefault”方法(在許多情況下可以使用defaultdict代替它-但並非總是如此-我喜歡setdefault,因為它更通用且功能更強大)
def process( data ):
result = {}
for vals in data:
result.setdefault( vals[0], [] ).append( vals[1:] )
return result
另外,Mathsaey的答案
{line[0] : [tup[1:] for tup in data if tup[0] == line[0]] for line in data}
是錯誤的,因為他的字典的值是列表列表而不是值列表。 我沒有足夠的聲譽來評論(新帳戶),因此請在此處添加此觀察結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.