Python 返回其值重复的键

Python 返回其值重复的键,python,dictionary,for-loop,counter,Python,Dictionary,For Loop,Counter,我有一本字典,它的键值是列表。每个列表可能包含一些重复多次的值,如下所示 {'VSS': ['A2', 'A3', 'A1'], 'X_P1_1': ['A2', 'A1'], 'X_P2': ['A3', 'A2'], 'X_P1_3': ['A2', 'A1'], 'VDD': ['A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'B', 'A3'], 'X': ['B', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1',

我有一本字典,它的键值是列表。每个列表可能包含一些重复多次的值,如下所示

{'VSS': ['A2', 'A3', 'A1'], 'X_P1_1': ['A2', 'A1'], 'X_P2': ['A3', 'A2'], 'X_P1_3': ['A2', 'A1'], 'VDD': ['A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'B', 'A3'], 'X': ['B', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'B', 'A1']}
我想做一个循环,它接受频率大于1的键 例如:

VDD: ['A3':8]
X : ['A1':8, 'B':2]
如何做到这一点?

您可以使用:

输出

{'VDD': {'A3': 8}, 'X': {'B': 2, 'A1': 8}}
{'VDD': [('A3', 8)], 'X': [('A1', 8), ('B', 2)]}
或者,如果您更喜欢将值作为元组列表:

from collections import Counter

data = {'VSS': ['A2', 'A3', 'A1'], 'X_P1_1': ['A2', 'A1'], 'X_P2': ['A3', 'A2'], 'X_P1_3': ['A2', 'A1'],
        'VDD': ['A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'A3', 'B', 'A3'],
        'X': ['B', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'B', 'A1']}

result = {key: [(element, count) for element, count in counts.items() if count > 1] for key, counts in map(lambda x: (x[0], Counter(x[1])), data.items()) if
          any(count > 1 for count in counts.values())}
print(result)
输出

{'VDD': {'A3': 8}, 'X': {'B': 2, 'A1': 8}}
{'VDD': [('A3', 8)], 'X': [('A1', 8), ('B', 2)]}
使用:


第一步是反转映射

valuekeydict = {}
for k, vs in orig_dict.items():
    for v in vs:
        valuekeydict.setdefault(v, []).append(v)
然后获取一组len>1的所有值

result = {v for vs in valuekeydict.values() for v in vs if len(vs) > 1}

您是否接受pandas?@W-B什么是pandas?括号内的表达式不需要行继续;-)@是的,我知道:)。但我觉得它更具可读性。。我可以看到自己在一行的末尾看到
}
,并且认为理解到此为止!