2

我想让每个字典的特定元素成为字典列表中的第一个元素。我将如何做到这一点,或者考虑到字典是无序的,甚至有可能吗?

我不想单独使用 .sort() 或 OrderedDict 因为两者都不会将所需的元素带到键的顶部,因为键是按字母顺序排列的。有没有办法在 Python 2.7 中结合使用 lamba 关键字和 sort 来做到这一点?

前任:

我想b成为第一把钥匙

{'a': 1, 'b': 2, 'c': 3}


{'b': 2, 'a': 1, 'c': 3}

语境:

我有一大套字典,其中每个字典代表一堆关于工作的信息。每个字典都有一个识别工作的代码。我的上级希望将此代码移到其字典的顶部。

4

4 回答 4

3

字典没有任何顶部或底部。你可以尝试这样的事情:

>>> from itertools import chain
>>> dic = {'a': 1, 'b': 2, 'c': 3}
>>> key = 'b'
for k in chain(key, (dic.viewkeys()-key)):
    print k, dic[k]
...     
b 2
a 1
c 3

最好使用OrderedDict.

>>> from collections import OrderedDict
>>> key = 'b'
>>> dic1 = OrderedDict((k,dic[k]) for k in chain(key, (dic.viewkeys()-key)))
>>> next(iter(dic1))
'b'
于 2013-08-08T19:58:34.127 回答
2

将您的 dict 包装在一个列表中并将您的代码移出。代替

data = {'code':'this is the code', 'some':'other', 'stuff':'here'}

data = ['this is the code', {'some':'other', 'stuff':'here'}]
于 2013-08-08T20:06:15.743 回答
1

自 python 3.6 以来,Python dicts 具有明确定义的顺序,因此现在这是完全可能的,尽管在提出问题时这是不可能的。一种方法是首先创建一个仅包含“b”的字典和一个包含其余部分的字典,然后以正确的顺序合并它们。

x = {'a': 1, 'b': 2, 'c': 3}
first_dict = {'b':x['b']}                          # create a dict for only b
second_dict = {k:v for k,v in x.items() if k!='b'} # create a dict for the rest
y = {**first_dict, **second_dict}

结果:

y = {'b': 2, 'a': 1, 'c': 3}
于 2021-10-20T09:51:17.583 回答
0

鉴于字典是无序的,甚至有可能吗?

不,这是不可能的。您发现的任何似乎可以解决问题的解决方案都不能保证在 python 版本、构建、代码上下文等之间工作。如果您想要一个有序的数据类型,您将需要字典以外的东西。

于 2013-08-08T19:55:25.187 回答