将具有重复值的键存储到字典中

2024-09-30 20:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,并想存储的名称的键有相同的前三个字母的价值。例如:

dictionary = {'apple': 'ams2.dfgsdfgsdfg', 'orange': 'bru1.asdfartq', 'grape': 'cph.dfsdfgsdgsdf', 'banana': 'ams4.ewrtwerth' 

由于我希望输出打印具有重复值的键列表(请看前3个字母),因此最终输出将打印如下列表:

list = ['apple', 'banana']

如果有人能通过创建代码来帮助这个新手,我们将不胜感激!你知道吗


Tags: 名称apple列表dictionary字典字母banana价值
3条回答

我的尝试:

dictionary = {'apple': 'ams2.dfgsdfgsdfg', 'orange': 'bru1.asdfartq', 'grape': 'cph.dfsdfgsdgsdf', 'banana': 'ams4.ewrtwerth'}

duplicate_keys = set()
for k1, v1 in dictionary.items():
    for k2, v2 in dictionary.items():
        if k1 == k2:
            continue
        if v1[:3] == v2[:3]:
            duplicate_keys.add(k1)
            duplicate_keys.add(k2)
print(list(duplicate_keys))

输出:

['apple', 'banana']

此解决方案避免了为每个元素遍历字典的每个元素,因为这样做的效果不好:

第一步是使用所需的键对数据进行排序-在您的示例中,键是值的前3个字符。你知道吗

def key_first3(element):
    return element[1][:3]
data = sorted(dictionary.items(), key=key_first3)

现在,您可以使用此键对数据进行分组,并计算组中的元素数。如果一个组有多个元素,请将其键添加到结果中:

result = []

for key, group in itertools.groupby(data, key=key_first3):
    group = list(group)
    if len(group) > 1:
         result.append(tuple(k for k, v in group))
>>> from itertools import groupby
>>> d = {'apple': 'ams2.dfgsdfgsdfg', 'orange': 'bru1.asdfartq', 'grape': 'cph.dfsdfgsdgsdf', 'banana': 'ams4.ewrtwerth'}
>>> f = key=lambda x: x[1][:3]
>>> grouped_d = {k:list(dict(v).keys()) for k,v in groupby(sorted(d.items(), key=f), f)}
>>> grouped_d
{'ams': ['apple', 'banana'], 'bru': ['orange'], 'cph': ['grape']}
>>> [v for k,v in grouped_d.items() if len(v)>1]
[['apple', 'banana']]
>>> 

相关问题 更多 >