首页 > 解决方案 > Python 似乎在长循环期间随机反转列表项

问题描述

我有一系列形式的字典:

[
    {
        generic_key: specific_key,
        generic_value: specific_value
    }
    ...
]

我试图将其解释为这种形式的字典数组:

[
    {
        specific_key: specific_value
    }
    ...
]

我试过这个:

new_array = []
for row in old_array:
    values = list(row.values())
    key = values[0]
    val = values[1]
    new_array.append({key: val})

这在大多数情况下都有效,但在某些情况下,它会交换它们以形成这样的字典:

{
    specific_value: specific_key
}

我查看了源文件,它执行此操作的行与它不执行此操作的行相同。

值得一提的是,该列表的长度约为 3000 个元素。

我在做傻事吗?我想也许 list(row.values()) 不一定保留顺序,但我不明白为什么它不会。

编辑固定代码错字,表明它正在附加集合

标签: pythonarrays

解决方案


dict枚举键/值的顺序表面上是任意的(这当然是有逻辑的,而且我认为 python3.7+ 是一致的,但是虽然我不知道排序标准是什么are) - 如果您想要订购,您首先会使用 alist而不是 adict来存储它们。如果generic_keygeneric_value每次都相同,那么处理此问题的理想方法是简单地按键提取:

key = row['generic_key']
value = row['generic_value']

如果不是这种情况,但有一种一致的方法来区分generic_keyand generic_value,那么您可以同时获取键和值,然后执行以下操作:

items = tuple(row.items())
if items[0][0] is the generic_key:  # insert whatever condition you need to here
    key = items[0][1]
    value = items[1][1]
else
    key = items[1][1]
    value = items[0][1]

推荐阅读