python - 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()) 不一定保留顺序,但我不明白为什么它不会。
编辑固定代码错字,表明它正在附加集合
解决方案
dict
枚举键/值的顺序表面上是任意的(这当然是有逻辑的,而且我认为 python3.7+ 是一致的,但是虽然我不知道排序标准是什么are) - 如果您想要订购,您首先会使用 alist
而不是 adict
来存储它们。如果generic_key
和generic_value
每次都相同,那么处理此问题的理想方法是简单地按键提取:
key = row['generic_key']
value = row['generic_value']
如果不是这种情况,但有一种一致的方法来区分generic_key
and 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]
推荐阅读
- java - 有没有更好/更通用的方法来解决动态转换?
- android - 在 MotionLayout 中水平对齐两个 TextView
- angular - 即使使用异步调用,我如何保持我的数组值?
- python - 如何使用 Python 移动到 Ubuntu 上的特定窗口?
- amazon-web-services - 将 Laravel 与 AWS cognito 集成
- excel - VBA,Excel将电子邮件正文多行提取到excel单元格中
- sql - 获取特定年份和月份的周数
- vb.net - 如何解决设计错误“找不到方法'System.Configuration.ConfigurationManager.AppSettings'。”
- scala - 对象 TagFragments 不是包 org.specs2.specification 的成员
- python - 如何展平 3 维数组