在字典中设置顺序

2024-09-19 23:44:54 发布

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

我是Python的初学者。不知道如何在字典里设置顺序。我搜索了一下,知道可以通过from collections import OrderedDict完成,但不知道如何使用它。我试图在下面提到的代码中比较两个字典,但我没有按顺序得到输出

d = { k[0]: k[1:] for k in a }
d2= { k[0]: k[1:] for k in b }
p = {i:j for i,j in d2.items() if i not in d} 
q = {i:j for i,j in d.items() if i not in d2}

你知道怎么做吗

更新问题:

i have a nested list . How to get each list of nested list in next line ?

[['Eth116/1/12        sales            connected 1         full    10G     Fabric Exte'], ['Eth116/1/13   marketing        connected 190       full    100                ']]

预期产出:

Eth116/1/12        sales            connected 1         full    10G     Fabric Exte
Eth116/1/13   marketing        connected 190       full    100                

Tags: inforif字典顺序notitemsfull
1条回答
网友
1楼 · 发布于 2024-09-19 23:44:54

字典是无序的,除了编写自己的dict子类(不推荐)之外,没有什么可以改变这一点。使用OrderedDict将起作用,如hiro Protagents的评论所示,只要您记住OrderedDict中的顺序是插入的顺序,并且与键的值无关。(Python 3dict的顺序也是如此)如果ab具有相同的元素,但顺序不同,则生成的OrderedDict将不相等,除非事先对ab进行排序

如果要比较两个dict而不能轻松确定插入顺序,则需要支持无序比较的数据结构。我没有你的数据,所以我不得不补充一些。我从这个输入开始

>>> a
[[1, 3, 5, 7, 9], [4, 9, 14, 19, 24, 29, 34, 39], [8, 17, 26, 35, 44, 53, 62, 71], [9, 19, 29, 39, 49, 59, 69, 79, 89]]
>>> b
[[1, 3, 5, 7, 9], [4, 9, 14, 19, 24, 29, 34, 39], [8, 17, 26, 35, 44, 53, 62, 71]]

如您所见,a有一个额外的元素以9开头

修改字典构造代码,使值元组不是列表,因为dict值需要可散列,以便下一步工作:

>>> d = { k[0]: tuple(k[1:]) for k in a }
>>> d2= { k[0]: tuple(k[1:]) for k in b }

然后,您可以将字典转换为集合,以进行无序比较:

>>> s = set(d.items())
>>> s2 = set(d2.items())
>>> s == s2
False

您可以使用集合运算符来发现差异:

>>> s2 <= s
True
>>> s - s2
set([(9, (19, 29, 39, 49, 59, 69, 79, 89))])

相关问题 更多 >