打印列表时列表索引超出范围(Python)
我一直在写一些基本上可以打印字典的代码,但是这些代码的键是按字母顺序排列的。所以我从这本字典开始打印列表时列表索引超出范围(Python),python,list,dictionary,Python,List,Dictionary,我一直在写一些基本上可以打印字典的代码,但是这些代码的键是按字母顺序排列的。所以我从这本字典开始 d = {'a' : 52, 'b' : 30, 'c' : 36} 所以我做了这个函数来转换和显示它们 def alph_order(d): l = sorted(d.keys()) for i in range(0, len(l), 2): l.insert(i+1, d[l[i]]) l.append(d[l[-1]]) for i in ra
d = {'a' : 52, 'b' : 30, 'c' : 36}
所以我做了这个函数来转换和显示它们
def alph_order(d):
l = sorted(d.keys())
for i in range(0, len(l), 2):
l.insert(i+1, d[l[i]])
l.append(d[l[-1]])
for i in range(0, len(l), 2):
print(l[i], ' :', l[i+1])
所以它打印出来
a : 52
b : 30
c : 36
但当我向字典中添加另一个键和值并再次调用该函数时,它会按字母顺序打印出前三个,然后说
print(l[i], ' :', l[i+1])
IndexError: list index out of range
当我用三个键启动字典时,它会工作,但每次添加一个键时,最后一个键都不会显示。为什么会这样?我认为,由于列表中现在有两个以上的对象,它应该仍然可以工作,但它不能工作。您当前必须在用于将词典转换为所需列表格式的代码中出错 这是您的代码:
l = sorted(d.keys())
for i in range(0, len(l), 2):
l.insert(i+1, d[l[i]])
l.append(d[l[-1]])
此不会将字典中的所有值插入列表中。如果您的字典中有m
项,则循环只会将字典中的m//2
值插入列表。(然后您还添加了最后一个项目,但如果m>3
,您仍然会缺少项目)
要正确地将字典转换为所需格式的列表(先输入键,然后输入值,按排序顺序),可以按如下操作:
import itertools
# d is a dictionary
my_list = list(itertools.chain.from_iterable(sorted(my_dict.items())))
说明
my_list = list(
# glue all of the sorted (key, value) pairs together
itertools.chain.from_iterable(
# sort the (key, value) pairs, giving a list [(k, v), ...]
sorted(
# get all of the (key, value) pairs in the dict
my_dict.items())))
从你的评论来看,这是家庭作业,你不能导入任何东西。。。然后考虑简单地在排序键上循环,将密钥和值添加到初始空白列表… ,可以避免这样的问题:
>>> for k, v in zip(l[::2], l[1::2]):
... print(k, ' :', v)
...
('a', ' :', 52)
('b', ' :', 30)
('c', ' :', 36)
无论如何,这里有一种更优雅、更恰当的方式来满足您的需求:
>>> d = {'a': 52, 'b': 30, 'c': 36}
>>> for item in sorted(d.items(), key=lambda x: x[0]):
... print(item)
...
('a', 52)
('b', 30)
('c', 36)
您的新列表是什么样子的?鉴于循环的外观,只有当列表长度为奇数(而非偶数)时,才会发生此错误。因此,您不能添加两个新成员,而只能添加一个。可能是您将
dict
转换为list
?l=sorted(d.keys())用于范围(0,len(l),2)中的i:l.insert(i+1,d[l[i]])l.append(d[l[-1]]
您能在原始帖子中发布代码以使其格式正确吗?OP中没有足够的信息来给出实际答案。他们收到的错误表明列表的长度为奇数,这肯定足以表明他们无法将字典转换为预期的列表格式。因此,这可能是真正的问题,这是一个解决方案。这是一个家庭作业,我们的教授说,我们不能导入任何东西来帮助我们