【问题标题】:KeyError while trying to create a list from existing list using len() function尝试使用 len() 函数从现有列表创建列表时出现 KeyError
【发布时间】:2012-12-15 23:37:18
【问题描述】:

我正在尝试创建一个列表来计算每个列表列表中的价格数量。

使用以下代码:

print data['OtherBids']

我得到以下输出:

[[0.074, 0.073, 0.072, 0.03, 0.029, 0.024, 0.021, 0.02], [0.02, 0.02, 0.015], [0.026, 0.026, 0.02, 0.02, 0.02, 0.015], [0.0.02, 0.021, , 0.017], [0.077, 0.076, 0.074, 0.055, 0.045, 0.021], [0.053, 0.052, 0.051, 0.023, 0.022], [0.016, 0.016]]

根据粗略的数据,我们可以看到第一个列表中有 8 个元素,第二个列表中有 3 个,第三个列表中有 6 个等等......但是,当我尝试使用while循环生成数据,返回如下错误:

data['number'][a] = len(data['OtherBids'][a])
KeyError: 'number'

导致上述错误的代码是:

a = 0
b = len(data['OtherBids'])

while a <= b - 1:
    for i in data['OtherBids']:
        data['number'][a] = len(data['OtherBids'][a]).get
    a = a + 1

有人知道我应该如何解决它吗?

【问题讨论】:

  • 尝试打印data,应该会清楚。
  • 您没有data['number'] 值。
  • 您的data 没有"number" 密钥。

标签: python dictionary while-loop


【解决方案1】:

您的data 没有"number" 密钥:

a = 0
b = len(data['OtherBids'])
# add this line
data['number'] = dict()

while a <= b - 1:
    for i in data['OtherBids']:
        # seems to be mistype: len(data['OtherBids'][a]).get
        # I removed .get
        data['number'][a] = len(data['OtherBids'][a])
    a = a + 1

UPD

我发现你的代码太复杂了

更多pythonic版本:

data['number'] = {}
for i, item in enumerate(data['OtherBids']):
    data['number'][i] = len(item)

内联版本:

data['number'] = {i:len(item) for i,item in enumerate(data['OtherBids'])}

【讨论】:

  • 好人啊!是否可以用我自己的键替换索引 {0,1,2,3,4,5,6}?谢谢!
  • @TingPing 我想是的,但是你想在哪里替换它们?我的意思是我没有看到这些键。顺便说一句,您在哪里使用i
  • 坦率地说,我只是用 i 来引导程序计算下一个元素。我受到您的代码的启发 - 需要更加 Pythonic!
  • @HansEngel 同意{} 而不是dict(),但对于新手来说,越详细越好,我认为..
猜你喜欢
  • 2020-09-11
  • 2015-08-23
  • 2018-05-09
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2020-06-27
相关资源
最近更新 更多