【问题标题】:In Python, how can I iterate through the values of a dictionary when the values are a list?在 Python 中,当值是列表时,如何遍历字典的值?
【发布时间】:2023-03-14 02:59:02
【问题描述】:

我有一本字典,有点复杂,所以我做个例子:

final = {x: [-.5, 1], y: [.75, 2], z: [.25, 3]}

使用字典“基因”,我需要遍历与每个键关联的列表,并且:

  1. 如果列表中的第二个值大于给定输入(我称之为 p),则将 0 附加到列表中,如果小于 p,则将 1 附加到列表中。

  2. 如果第一个值为负数,我需要将附加的数字乘以-1,使其为负数。

这是我现在的代码(运行 python 2.7):

for k, v in final.iterkeys():
    if v[1] <= p:
        v.append("1")
    else:
        v.append("0")
    if v[0] < 0:
        v[2] *= -1

之后,我只将键(在本例中为 x、y 和 z)和附加的数字写入 csv 文件。如果您想知道,这是我的代码:

writer = csv.writer(open("result.csv", "wb"))
for k, v in final.iteritems():
    writer.writerow([k, v[2]])

据我所知,该部分有效。但我可能是错的,我的错误实际上是存在的

p=2 的预期输出,与最终输出的 csv 文件一样,如下所示:

x, -1
y, 1
z, 0

相反,我只是得到

x, 0
y, 0
z, 0

知道发生了什么吗?我对编程和 python 还很陌生,因此非常感谢任何帮助!

【问题讨论】:

  • 如果要遍历键值对,为什么要使用iterkeys?那是iteritems。 (实际上,您甚至不应该使用 iterkeys 来遍历键,因为 for k in d 会这样做。)
  • 为什么要附加字符串"0""1" 而不是整数?您正在尝试对列表项进行数学运算,因此您似乎想要整数,但看起来您有一个字符串列表或混合数据类型。
  • 将 iterkeys 更改为 iteritems,并使用整数而不是字符串。输出中仍然只有 0
  • 可能是因为v[0]v[1] 也是字符串。
  • 那么我应该从:for k, v in final.iteritems(): int(v[0:]) 开始,然后继续循环的其余部分吗?

标签: python list loops csv dictionary


【解决方案1】:

问题是您要附加一个字符串“0”或“1”,然后将其乘以-1。尝试附加整数 0 或 1,将其相乘,然后将最终值转换为字符串。

for v in final.itervalues():
    if v[1] <= p:
        v.append(1)
    else:
        v.append(0)
    if v[0] < 0:
        v[2] *= -1

【讨论】:

  • 好吧,最后我还需要转换成字符串吗?或者 csv writer 会写整数好吗?
  • 这取决于你想如何将它存储在字典的列表中。我将其保留为数字。我相信csv writer会使用数字的repr值。
  • 好吧,我试过把 v[2] 变成一个字符串,没有把 v[2] 变成一个字符串,都只输出 0
  • 运行上述for循环后,final={'y': [0.75, 2, 1], 'x': [-0.5, 1, -1], 'z': [0.25, 3, 0]}。你final的价值是多少?
  • 我得到一个 AtributeError: 'str' object has no attribute 'append'
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2012-07-07
  • 2023-03-14
相关资源
最近更新 更多