我有一系列以下形式的字典:
[
{
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())不一定保留顺序,但是我不明白为什么不这样做。
编辑固定代码拼写错误,提示它正在追加集
答案 0 :(得分:3)
枚举dict
键/值的顺序表面上是任意的(当然这是一种逻辑,从python3.7 +开始,它是 consistent ,但是我不知道该订购的标准是什么)-如果您要订购,则应该首先使用list
而不是dict
来存储它们。如果generic_key
和generic_value
每次都相同,那么处理此问题的理想方法是简单地通过键提取:
key = row['generic_key']
value = row['generic_value']
如果不是这种情况,但是有一种一致的方法来区分generic_key
和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]