我有一本字典,想存储键值相同的前三个字母的键的名称。例如:
dictionary = {'apple': 'ams2.dfgsdfgsdfg', 'orange': 'bru1.asdfartq', 'grape': 'cph.dfsdfgsdgsdf', 'banana': 'ams4.ewrtwerth'
由于我希望输出打印具有重复值的键列表(请查看前3个字母),因此最终输出将打印如下列表:
list = ['apple', 'banana']
如果有人可以通过创建代码来帮助菜鸟,将不胜感激!
答案 0 :(得分:0)
我的尝试
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']
答案 1 :(得分:0)
此解决方案避免为每个元素循环遍历字典的每个元素,因为这样做效果不佳:
第一步是使用所需的键对数据进行排序-在您的示例中,键是值的前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))
答案 2 :(得分:0)
>>> 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']]
>>>
答案 3 :(得分:0)
您可以使用正则表达式来捕获相似项目开头的3个字母。然后使用列表推导找到具有相似3个单词的项的键。决定使用zip
。刚实现的字典不再具有属性iteritems()
。不能告诉原因
import re
a = "".join(re.findall(r"(\b\w{3}).*?\1"," ".join(dictionary.values())))
[m for m,x in zip(dictionary,dictionary.values()) if a in x]
['apple', 'banana']