首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取共享相同列表值及其通用值的所有字典键的字典

获取共享相同列表值及其通用值的所有字典键的字典
EN

Stack Overflow用户
提问于 2019-08-22 13:06:23
回答 2查看 52关注 0票数 1

我有一个列表的字典,并希望将共享重复列表的关键字合并为字典中的单独列表,该字典还包含它们都共享的原始列表。

我尝试使用现有的解决方案来处理hashable类型,例如当字典只包含字符串作为值时。相关的SO问题可以在here找到。每次我尝试这些解决方案中的任何一个或任何其他我尝试过的类似技术时,都会导致无法处理的类型错误。

这是我的字典的一个例子。

代码语言:javascript
复制
exampledict = {'FOO': [1, 2, 3, 4, 25, 9], 'BAR': [1, 2], 'BAZ': [1, 2], 'ABC': [1, 2, 3, 4, 25, 9]}

正确的输出应该是两个字典:

代码语言:javascript
复制
finaldict1 = {'keys': ['BAR', 'BAZ'], 'value': [1, 2]}
finaldict2 = {'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}
EN

回答 2

Stack Overflow用户

发布于 2019-08-22 13:23:01

您可以尝试:

代码语言:javascript
复制
from operator import itemgetter
from itertools import groupby

final_dicts = [{'keys': [e[0] for e in v], 'value': k} for k, v in groupby(sorted(exampledict.items(), key=itemgetter(1)), key=itemgetter(1))]
finaldict1 , finaldict2 = final_dicts

print(finaldict1)
print(finaldict2)

输出:

代码语言:javascript
复制
{'keys': ['BAR', 'BAZ'], 'value': [1, 2]}
{'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}

在本例中,恰好您有两个dict,但是您可以根据需要使用final_dicts变量

票数 2
EN

Stack Overflow用户

发布于 2019-08-22 13:36:42

使用collections.defaultdict

Ex.

代码语言:javascript
复制
from collections import defaultdict
exampledict = {'FOO': [1, 2, 3, 4, 25, 9], 'BAR': [1, 2], 'BAZ': [1, 2], 'ABC': [1, 2, 3, 4, 25, 9]}
newMap = defaultdict(set)
for key, value in exampledict.items():
    newMap[tuple(value)].add(key)

result = [{'keys':list(newMap[x]),'value':list(x)} for x in newMap ]
print(result)

O/P:

代码语言:javascript
复制
[{'keys': ['FOO', 'ABC'], 'value': [1, 2, 3, 4, 25, 9]}, {'keys': ['BAR', 'BAZ'], 'value': [1, 2]}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57602376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档