我在 python 中有一个默认的字典 d
,其中包含两个列表,如下所示:
{
'data1': [0.8409093126477928, 0.9609093126477928, 0.642217399079215, 0.577003839123445, 0.7024399719949195, 1.0739533732043967],
'data2': [0.9662666242560285, 0.9235637581239243, 0.8947656867577896, 0.9266919525550584, 1.0220039913024457]
}
将来在默认字典中可以有很多列表,如data1
、data2
、data3
、data4
等我需要比较默认字典的索引值。因此,对于上面的默认字典,我需要检查天气 data1[0]->0.8409093126477928
是否小于 data2[0]->0.9662666242560285
,其他索引也一样,并将获奖名单索引的结果存储在单独的列表中,如下所示:
result = ['data1', 'data2', 'data1', 'data1', 'data1']
如果任何列表的长度大于其他列表,我们只需要检查最后一个索引值是否小于 1。就像 data1[5]
不能与 data2[5]
进行比较,因为 data2[5]
没有值,因此我们将简单地检查是否data1[5]
是否小于1。如果它小于 1 那么我们将考虑它并将它添加到 result
否则忽略它并且不会将它保存在 result
中。
为了解决这个问题,我想到了从默认字典中提取列表到单独的列表,然后使用 for 循环来比较索引值,但是当我执行 print(d[0])
打印时0th
索引列表,它打印出 []
。为什么它打印为空。我怎样才能比较上面的索引值。请帮忙。谢谢
最佳答案
编辑:按照@ggorlen 的建议,将自定义迭代器替换为 zip_longest
我会像这样使用 custom_iterator,
- 在每次迭代中从每个数组中压缩最长的一个项目。对于较短的数组,当迭代超过其长度时它将返回 1
- 列表理解循环遍历迭代器并获取最小项的第一个索引
item.index(min(item))
然后获取对应于最小值的键keys[item.index (min(item))]
- 如果选择的列表比当前迭代器索引短,它要么跳过要么给出“NA”值
from itertools import zip_longest
keys = list(d.keys())
lengths = list(map(len,d.values()))
result = [keys[item.index(min(item))]
for i, item in enumerate(zip_longest(*d.values(), fillvalue=1))
if lengths[item.index(min(item))]>i]
result
如果你想在找到的最小值不小于一个时给出默认键而不是跳过
result = [keys[item.index(min(item))] if lengths[item.index(min(item))]>i else "NA"
for i, item in enumerate(zip_longest(*d.values(), fillvalue=1))]
关于python - 如何比较python中默认字典中列表的索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151780/