Python似乎在长循环中随机反转列表项

时间:2019-05-20 13:14:51

标签: python arrays

我有一系列以下形式的字典:

[
    {
        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())不一定保留顺序,但是我不明白为什么不这样做。

编辑固定代码拼写错误,提示它正在追加集

1 个答案:

答案 0 :(得分:3)

枚举dict键/值的顺序表面上是任意的(当然这是一种逻辑,从python3.7 +开始,它是 consistent ,但是我不知道该订购的标准是什么)-如果您要订购,则应该首先使用list而不是dict来存储它们。如果generic_keygeneric_value每次都相同,那么处理此问题的理想方法是简单地通过键提取:

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

如果不是这种情况,但是有一种一致的方法来区分generic_keygeneric_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]