在字典中设置顺序
Setting order in Dictionary
我是 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
字典是无序的,除了编写自己的 dict
子类(不推荐)之外,您无能为力。使用 OrderedDict
将起作用,如 hiro 主角的评论所示,只要您记住 OrderedDict
中的顺序是 插入顺序 并且是与键的值无关。 (Python 3 dict
s 的顺序也是如此。)如果 a
和 b
具有相同的元素但顺序不同,则结果 OrderedDict
s 将不相等,除非您事先对 a
和 b
进行排序。
如果你想比较两个不能轻易确定插入顺序的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
。
修改您的字典构造代码,使值元组不列表,因为字典值需要是可散列的才能使下一步工作:
>>> 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))])
我是 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
字典是无序的,除了编写自己的 dict
子类(不推荐)之外,您无能为力。使用 OrderedDict
将起作用,如 hiro 主角的评论所示,只要您记住 OrderedDict
中的顺序是 插入顺序 并且是与键的值无关。 (Python 3 dict
s 的顺序也是如此。)如果 a
和 b
具有相同的元素但顺序不同,则结果 OrderedDict
s 将不相等,除非您事先对 a
和 b
进行排序。
如果你想比较两个不能轻易确定插入顺序的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
。
修改您的字典构造代码,使值元组不列表,因为字典值需要是可散列的才能使下一步工作:
>>> 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))])