我有一个字典,其中包含圆弧的名称和圆弧的位置。我想用for循环来创建字典中的所有弧。当我运行此代码时,我可能会错误TypeError: 'dict_keys' object does not support indexing
以下是相关代码:
self.gaugeDict={"gauge1": [100,105,100],
"gauge2": [300,105,100],
"gauge3": [100, 210, 100],
"gauge4": [300, 210, 100]}
for i in range(len(self.gaugeDict)):
self.w.create_circle_arc(self.gaugeDict.keys()[i][0],
self.gaugeDict.keys()[i][1],
self.gaugeDict.keys()[i][2],
fill="black",
outline="",
start=180,
end=0)
答案 0 :(得分:1)
由于python-3.x,dict.keys()
不会返回一个键列表(可以像somedict.key()[i]
一样使用),但是代理 em> object,遍历键。
但我们可以同时迭代键(和值)。根据您的代码,您实际上可能根本不对这些键感兴趣,但只有在值中,我们才能迭代而不是像这样的值:
for a, b, c in self.gaugeDict.values():
self.w.create_circle_arc(
a,
b,
c,
fill="black",
outline="",
start=180,
end=0
)
我们还在这里使用了一种名为 iterable unpacking 的技术:字典中的每个值,包含三个值的列表,都在a
,b
和{{{}}中解压缩{1}}。但是,如果列表中包含更多元素,则会失败。在这种情况下,我们可以使用一次性变量来捕获剩余的元素:
c
或者我们可以使用索引:
for a, b, c, *__ in self.gaugeDict.values():
self.w.create_circle_arc(
a,
b,
c,
fill="black",
outline="",
start=180,
end=0
)
答案 1 :(得分:1)
好像你只需要迭代dict的值:
for x in self.gaugeDict.values():
self.w.create_circle_arc(x[0],
x[1],
x[2],
fill="black",
outline="",
start=180,
end=0)
答案 2 :(得分:1)
正如@Willem正确指出的那样,你无法做到这一点
见下文解释示例
>>> dict1={0:"abc",1:"ab",2:"a"}
>>> dict1.keys()
dict_keys([0, 1, 2])
>>> for key in dict1.keys():
... print(key)
...
The output would be as follows
0
1
2
但是在python 2中,你可能会得到一个列表来回复你的电话 字典键
>>> dict1={0:"New York", 1:"California", 2:"Bangalore"}
>>> dict1.keys()
[0, 1, 2]
因此,如上所述,对您的代码进行适当的更改