我想通过索引号迭代python中的字典。
示例:
dict = {'apple':'red','mango':'green','orange':'orange'}
我想从头到尾迭代字典,以便我可以通过索引访问字典项。例如,第1项将是apple,第2项将是芒果,值将为绿色。
这样的事情:
for i in range(0,len(dict)):
dict.i
答案 0 :(得分:76)
您可以迭代键并按键获取值:
for key in dict.iterkeys():
print key, dict[key]
您可以迭代键和相应的值:
for key, value in dict.iteritems():
print key, value
如果您想索引,可以使用enumerate
(请记住字典没有订单):
>>> for index, key in enumerate(dict):
... print index, key
...
0 orange
1 mango
2 apple
>>>
答案 1 :(得分:21)
这里有一些非常好的答案。我想在这里添加以下内容:
some_dict = {
"foo": "bar",
"lorem": "ipsum"
}
for index, (key, value) in enumerate(some_dict.items()):
print(index, key, value)
结果
0 foo bar
1 lorem ipsum
似乎可以使用Python 2.7
和3.5
答案 2 :(得分:2)
我想知道今天的python OrderedDict(idx,key,value)(按照它们应该在收据上显示的方式将SKU映射到数量)。这里的答案都是无赖。
至少在python 3中,这种方式有效且有意义。
In [1]: from collections import OrderedDict
...: od = OrderedDict()
...: od['a']='spam'
...: od['b']='ham'
...: od['c']='eggs'
...:
...: for i,(k,v) in enumerate(od.items()):
...: print('%d,%s,%s'%(i,k,v))
...:
0,a,spam
1,b,ham
2,c,eggs
答案 3 :(得分:1)
由于您想按顺序进行迭代,因此可以使用sorted
:
for k, v in sorted(dict.items()):
print k,v
答案 4 :(得分:0)
这样做:
for i in dict.keys():
dict[i]
答案 5 :(得分:0)
有几种方法可以在python中调用for循环,这是到目前为止我发现的内容:
A = [1,2,3,4]
B = {"col1": [1,2,3],"col2":[4,5,6]}
# Forms of for loop in python:
# Forms with a list-form,
for item in A:
print(item)
print("-----------")
for item in B.keys():
print(item)
print("-----------")
for item in B.values():
print(item)
print("-----------")
for item in B.items():
print(item)
print("The value of keys is {} and the value of list of a key is {}".format(item[0],item[1]))
print("-----------")
结果是:
1
2
3
4
-----------
col1
col2
-----------
[1, 2, 3]
[4, 5, 6]
-----------
('col1', [1, 2, 3])
The value of keys is col1 and the value of list of a key is [1, 2, 3]
('col2', [4, 5, 6])
The value of keys is col2 and the value of list of a key is [4, 5, 6]
-----------
答案 6 :(得分:0)
一些评论正确地说这些答案与问题不符。
一个人可能想使用“索引”遍历字典的一个原因是,例如,计算字典中一组对象的距离矩阵。以它为例(对以下项目符号的基础知识有所了解):
这就是为什么大多数包裹都使用凝聚距离矩阵(How does condensed distance matrix work? (pdist))
的原因但请考虑以下情况:正在实现距离矩阵的计算,或任何种类的排列。在这种情况下,您需要跳过一半以上情况的结果。这意味着遍历所有字典的FOR循环只是命中IF并跳转到下一个迭代,而在大多数时间实际上并没有执行任何工作。对于大型数据集,这些额外的“ IF”和循环在处理时间上的总和是相关的,如果在每个循环中,又在字典上开始一个“索引”,则可以避免。
除了问题,我现在的结论是答案是否定的。除了键或迭代器之外,没有其他方法可以通过任何索引直接访问字典值。
我知道到目前为止,大多数答案都采用了不同的方法来执行此任务,但实际上不允许任何索引操作,这在例举的情况下很有用。
我看到的唯一替代方法是使用列表或其他变量作为字典的顺序索引。下面是一个例子来说明这种情况:
#!/usr/bin/python3
dishes = {'spam': 4.25, 'eggs': 1.50, 'sausage': 1.75, 'bacon': 2.00}
print("Dictionary: {}\n".format(dishes))
key_list = list(dishes.keys())
number_of_items = len(key_list)
condensed_matrix = [0]*int(round(((number_of_items**2)-number_of_items)/2,0))
c_m_index = 0
for first_index in range(0,number_of_items):
for second_index in range(first_index+1,number_of_items):
condensed_matrix[c_m_index] = dishes[key_list[first_index]] - dishes[key_list[second_index]]
print("{}. {}-{} = {}".format(c_m_index,key_list[first_index],key_list[second_index],condensed_matrix[c_m_index]))
c_m_index+=1
输出为:
Dictionary: {'spam': 4.25, 'eggs': 1.5, 'sausage': 1.75, 'bacon': 2.0}
0. spam-eggs = 2.75
1. spam-sausage = 2.5
2. spam-bacon = 2.25
3. eggs-sausage = -0.25
4. eggs-bacon = -0.5
5. sausage-bacon = -0.25
值得一提的是诸如intertools之类的软件包,它允许人们以较短的格式执行类似的任务。
答案 7 :(得分:0)
当我需要保留订单时,我使用一个列表和一个伴随的字典:
color = ['red','green','orange']
fruit = {'apple':0,'mango':1,'orange':2}
color[fruit['apple']]
for i in range(0,len(fruit)): # or len(color)
color[i]
给您带来的不便是,我很难从索引中获得成果。当我需要它时,我使用一个元组:
fruitcolor = [('apple','red'),('mango','green'),('orange','orange')]
index = {'apple':0,'mango':1,'orange':2}
fruitcolor[index['apple']][1]
for i in range(0,len(fruitcolor)):
fruitcolor[i][1]
for f, c in fruitcolor:
c
您的数据结构应设计为适合您的算法需求,以使其保持整洁,可读性和优雅性。
答案 8 :(得分:-3)
我想不出你为什么要那样做的任何理由。如果你只需要遍历字典,你就可以这样做。
for key, elem in testDict.items():
print key, elem
或强>
for i in testDict:
print i, testDict[i]