首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将“对”列表转换为字典?

将“对”列表转换为字典?
EN

Stack Overflow用户
提问于 2018-09-06 14:19:32
回答 3查看 199关注 0票数 4

这个问题以前是用一个令人震惊的错误问的:把“唯一对”的数字计数到python字典里?

这是一个算法问题,我不知道最有效的解决方案。我的想法是以某种方式在列表中缓存值,并枚举速度非常慢的pairs...but。我猜itertools有一些有用的东西。

假设我有一个整数列表,其中从不重复:

代码语言:javascript
运行
复制
list1 = [2, 3]   

在这种情况下,有一个独特的对2-3和3-2,所以字典应该是:

代码语言:javascript
运行
复制
{2:{3: 1}, 3:{2: 1}}

也就是说,有1对2-3和1对3-2.

对于较大的列表,配对是相同的。

代码语言:javascript
运行
复制
list2 = [2, 3, 4]

副部长

代码语言:javascript
运行
复制
{2:{3:1, 4:1}, 3:{2:1, 4:1}, 4:{3:1, 2:1}}

(1)一旦列表的大小变得大得多,如何使用python数据结构算法找到这种格式中的“唯一对”?

(2)我提到列表不能有重复整数。

代码语言:javascript
运行
复制
[2, 2, 3]

是不可能的,因为有两个2s。

但是,可以列出一份清单:

代码语言:javascript
运行
复制
list3 = [[2, 3], [2, 3, 4]] 

所以字典必须是

代码语言:javascript
运行
复制
{2:{3:2, 4:1}, 3:{2:2, 4:1}, 4:{2:1, 3:1}}

因为有两对2-3和3-2。如何“更新”字典给出一个列表中的多个列表?

编辑:我的最终用例是,我想迭代数百个整数列表,并创建一个带有“计数”对的字典。这有道理吗?可能还有另一个更有用的数据结构。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-06 14:36:38

对于嵌套列表示例,可以使用itertools.permutationsdict.setdefault执行以下操作

代码语言:javascript
运行
复制
from itertools import permutations

list3 = [[2, 3], [2, 3, 4]]

d = {}
for l in list3:
    for a, b in permutations(l, 2):
        d[a][b] = d.setdefault(a, {}).setdefault(b, 0) + 1

# {2: {3: 2, 4: 1}, 3: {2: 2, 4: 1}, 4: {2: 1, 3: 1}}

对于平面列表l,只使用内循环,忽略外部循环。

票数 3
EN

Stack Overflow用户

发布于 2018-09-06 14:29:02

在本例中,我将只使用一个直接数字的列表,而不使用嵌套列表:

代码语言:javascript
运行
复制
values = [3, 2, 4]
result = dict.from_keys(values)
for key, value in result.items():
    value = {}
    for num in values:
        if num != key:
            value[num] = 1

这将创建一个以每个数字作为键的dict。现在,在每个键中,如果值不是我们所在的键的名称,则将该值作为嵌套的迪克,它的内容为原始值列表中的每个数字的num: 1

票数 1
EN

Stack Overflow用户

发布于 2018-09-06 14:35:50

违约排列结合使用

代码语言:javascript
运行
复制
from collections import defaultdict
from itertools import permutations

d = defaultdict(dict)
for i in [x for x in permutations([4,2,3])]:
    d[i[0]] = {k: 1 for k in i[1:]}

输出是

代码语言:javascript
运行
复制
In [22]: d
Out[22]: defaultdict(dict, {2: {3: 1, 4: 1}, 4: {2: 1, 3: 1}, 3: {2: 1, 4: 1}})

对于继承列表列表,https://stackoverflow.com/a/52206554/8060120

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52206196

复制
相关文章

相似问题

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