也許是一個愚蠢的問題,但我對我的代碼有點困惑
我有一本這樣的字典
{'k1': {'a': 11111,
'aa': 11111,
'b': 11111,
'bb': 11111,
'c': 11111,
'cc': 11111,
'd': 22222,
'dd': 22223,
'ee': 22222},
'k2': {'f': 33333,
'g': 33333,
'h': 33333,
'i': 33333,
'j': 33333,
'k': 44443,
'l': 33334,
'm': 44443,
'n': 44443}}
并且我想在每對鍵中獲得與其他鍵不同的值(假設一半以上是相等的值。)
即在上面的例子中 K1[d],K1[dd] 和 K1[ee] 值不同于 K1[a],K1[b],K1[c],K1[bb],K1[cc] 同義詞 K2
for k,v in my_dict.items():
if isinstance(v,dict):
for key,value in v.items():
print(k,value) <-- dunno how to check differences on the fly
uj5u.com熱心網友回復:
您可以set在 dict 值上使用并查看它len是否為 1:
{k: len(set(v.values())) == 1 for k, v in d.items()}
結果:
{'k1': False, 'k2': True}
uj5u.com熱心網友回復:
如果要檢查所有值是否相等,一種方法是:
d = {'k1': {'a': 11111,
'b': 11111,
'c': 11111,
'd': 22222},
'k2': {'f': 33333,
'g': 33333,
'h': 33333,
'i': 33333}}
for k, dic in d.items():
iterable = iter(dic.values())
first = next(iterable)
all_equals = all(first == val for val in iterable)
print(k, all_equals)
輸出
k1 False
k2 True
作為替代方案,如果元素是可散列的,您可以使用 aset來查找唯一元素的數量并驗證此數字是否為1:
for k, dic in d.items():
print(k, 1 == len(set(dic.values())))
輸出
k1 False
k2 True
更新
如果內部鍵的數量是 10,并且總是有 6 個等于元素,你可以這樣做:
d = {'k1': {'a': 11111,
'aa': 11111,
'b': 11111,
'bb': 11111,
'c': 11111,
'cc': 11111,
'd': 22222,
'dd': 22223,
'ee': 22222},
'k2': {'f': 33333,
'g': 33333,
'h': 33333,
'i': 33333,
'j': 33333,
'jj': 33333,
'k': 44443,
'l': 33334,
'm': 44443,
'n': 44443}}
for k, dic in d.items():
inverse = {}
for ki, val in dic.items():
if val not in inverse:
inverse[val] = []
inverse[val].append(ki)
for val, kis in inverse.items():
if len(kis) < 6:
print(k, val, kis)
輸出
k1 22222 ['d', 'ee']
k1 22223 ['dd']
k2 44443 ['k', 'm', 'n']
k2 33334 ['l']
上面的輸出給出了頂部鍵、值和相應的內部鍵。
uj5u.com熱心網友回復:
您可以使用 Counter 類(來自集合)來識別每個子字典中最常見的值,并將其用作鍵的過濾器:
from collections import Counter
common = {k:Counter(d.values()).most_common(1)[0][0] for k,d in K.items()}
r = { k:{kn for kn,v in d.items() if common[k]!=v} for k,d in K.items() }
print(r)
{'k1': {'dd', 'ee', 'd'}, 'k2': {'k', 'n', 'm', 'l'}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347782.html
上一篇:Python:從csv構建字典
下一篇:通過物件陣列中的鍵獲取元素
