Python:for循环中的索引字典

时间:2018-06-09 17:04:19

标签: python dictionary

我有一个字典,其中包含圆弧的名称和圆弧的位置。我想用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)

3 个答案:

答案 0 :(得分:1)

由于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 的技术:字典中的每个值,包含三个值的列表,都在ab和{{{}}中解压缩{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]

因此,如上所述,对您的代码进行适当的更改