首页 > 解决方案 > Python 字典:使 key:value 成为键并附加新值

问题描述

编辑:我的问题得到了很多后续问题,因为从表面上看,这似乎没有任何意义。对于大多数人来说,字典是解决这个问题的不合逻辑的方法。我同意,并且对我的限制感到沮丧(在评论中解释)。在我的场景中,原始的 KV 对将被编码为数据,以供另一台服务器使用 ObjectID 读取。然而,这必须作为字典输入到编码函数中。顺序无关紧要,但必须为 KV 对赋予一个新的唯一值。原始 KV 对最终将作为新字典中的新字符串键,并将 ObjectID 作为新的唯一值。

请记住,我使用的是 Python 2.7。

问题

请注意,这是在我给出的约束范围内呈现由 ObjectID 值编码的字典 (dictA) 的问题

我有一本字典,比如说dictA = {'a':'10', 'b':'20', 'c':'30'},我有一个列表ObjectIdentifier('n'),其中n是一个数字。创建一个新字典的最佳方法是什么,它的dictB等于'键:值对,等于列表中的对应值。dictBdictAObjectIdentifier('n')

新的dictB应该是:

{"'a':'10'":ObjectIdentifier('n'), "'b':'20'":ObjectIdentifier('n+1'), "'c':'30'":ObjectIdentifier('n+2')}

如果那有意义的话。

标签: pythonpython-2.7dictionarykey-value

解决方案


问题是字典没有排序。所以你说

dictA = {'a':'10', 'b':'20', 'c':'30'}

但据python所知,它可能是

dictA = {'c':'30', 'a':'10', 'b':'20'}

因为字典没有顺序。

你可以像这样创建你的字典:

result = {key: ObjectIdentifier(n+pos) for pos, key in enumerate(dictA.items())}

但是没有办法确定哪个键会落在哪个位置,因为正如我所说,字典没有顺序。

如果你想要字母顺序,只需使用sorted()

result = {key: ObjectIdentifier(n+pos) 
    for pos, key in enumerate(sorted(dictA.items()))}

推荐阅读