我有一個這樣的字典串列。
x=({'apple': 5, 'mango': 3,'banana': 2}, {'apple': 6, 'mango': 1})
我想用鍵找到子字典和范圍值中的重復元素。例子。
預期產出
{'apple': [5, 6], 'mango': [1, 3], 'banana': [2, 2]}
在應用了一些基礎知識之后。我已經按如下方式解決了這個問題。
import collections
result = collections.defaultdict(list)
for i, d in enumerate(x):
result[frozenset(d.items())].append(i)
print(result)
我得到的輸出。
defaultdict(list,
{frozenset({('apple', 5), ('banana', 2), ('mango', 3)}): [0],
frozenset({('apple', 6), ('mango', 1)}): [1]})
正如我之前提到的,我的預期輸出應該是重復鍵范圍值的串列。你們能幫我我應該應用哪些步驟/邏輯,以便我可以獲得如上所述的預期輸出。
uj5u.com熱心網友回復:
(i) 用于dict.setdefault組合字典串列
(ii) 從 (i) 中對字典的值進行排序以獲得范圍值
out = {}
for d in x:
for k,v in d.items():
out.setdefault(k, []).append(v)
for k,v in out.items():
if len(v) > 1:
v.sort()
out[k] = [v[0], v[-1]]
else:
out[k] = [v[0], v[0]]
輸出:
{'apple': [5, 6], 'mango': [1, 3], 'banana': [2, 2]}
uj5u.com熱心網友回復:
你已經給了tuple。但是,考慮到您的源資料是list.
x=[{'apple': 5, 'mango': 3,'banana': 2}, {'apple': 6, 'mango': 1}]
sourceDict = {}
for i in x:
for key,value in i.items():
if not key in sourceDict:
sourceDict.update({key:[value]})
else:
sourceDict[key].append(value)
sourceDict 輸出:
{'apple': [5, 6], 'mango': [3, 1], 'banana': [2]}
如果你想讓它們排序,
for i,j in sourceDict.items():
sourceDict[i] = sorted(j)
這使,
{'apple': [5, 6], 'mango': [1, 3], 'banana': [2]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415217.html
標籤:
上一篇:為什么用戶在django測驗用例中自動進行身份驗證?
下一篇:如何確定序列是否在整數串列中?
