按列表顺序打印字典
Printing dictornary with list order
我有下面的代码,它是一个地址簿(一个字典列表)和一个列表。这个想法是按照列表的顺序打印字典中的项目(因为字典打乱了一切的顺序)。当我运行这段代码时,它抛出一个异常(如下图)。我不确定我做错了什么,因为我尝试了很多不同的变体,但我一直想知道为什么它不起作用。
请帮忙?
addressBook = [
{
'Nickname': 'Jimmy',
'Name': 'James Roberts',
'Address': '2/50 Robe Street',
'Phone': '0273503342'
},
{
'Nickname': 'Bob',
'Name': 'Robert',
'Address': '1 Vivan Street',
'Phone': '067578930'
}
]
addressFields = ['Nickname', 'Name', 'Address', 'Phone']
def listAll(addressBook, addressFields):
for i in addressBook:
for key in addressFields:
print("{0} {1}".format(key, addressBook[i][key]))
print("{0} {1}".format(key, addressBook[i][key]))
TypeError: list indices must be integers, not dict
发布这个问题后我找到了答案。
我将 addressBook for 循环转换为一个范围 (len(addressBook)) 并且它起作用了。
for i in range(len(addressBook)):
首先,您在 'James Roberts
之后的 addressBook
文字中缺少 '
。其次,问题是您在做 addressBook[i][key]
而不是 i[key]
。 i
已经引用了包含在 addressBook
中的字典,因此您的代码试图使用 list
的元素作为自身的索引。
def listAll(addressBook, addressFields):
for i in addressBook:
for key in addressFields:
print('{} {}'.format(key, i[key]))
Python 3-友好一行:
def listAll(addressBook, addressFields):
print(*('{} {}'.format(j, i[j]) for i in addressBook for j in addressFields), sep='\n')
#!/usr/bin/python
addressBook = [{'Nickname': 'Jimmy', 'Name': 'James Roberts', 'Address': '2/50 Robe Street', 'Phone': '0273503342'},{'Nickname': 'Bob', 'Name': 'Robert', 'Address': '1 Vivan Street', 'Phone': '067578930'}]
addressFields = ['Nickname', 'Name', 'Address', 'Phone']
def listAll(addressBook, addressFields):
for i in addressBook:
for val in addressFields:
print("{0} {1}".format(val, i[val]))
listAll(addressBook, addressFields)
或者在一行中:
print('\n'.join(element for element in [j+" "+ i[j] for i in addressBook for j in addressFields]
))
我有下面的代码,它是一个地址簿(一个字典列表)和一个列表。这个想法是按照列表的顺序打印字典中的项目(因为字典打乱了一切的顺序)。当我运行这段代码时,它抛出一个异常(如下图)。我不确定我做错了什么,因为我尝试了很多不同的变体,但我一直想知道为什么它不起作用。
请帮忙?
addressBook = [
{
'Nickname': 'Jimmy',
'Name': 'James Roberts',
'Address': '2/50 Robe Street',
'Phone': '0273503342'
},
{
'Nickname': 'Bob',
'Name': 'Robert',
'Address': '1 Vivan Street',
'Phone': '067578930'
}
]
addressFields = ['Nickname', 'Name', 'Address', 'Phone']
def listAll(addressBook, addressFields):
for i in addressBook:
for key in addressFields:
print("{0} {1}".format(key, addressBook[i][key]))
print("{0} {1}".format(key, addressBook[i][key]))
TypeError: list indices must be integers, not dict
发布这个问题后我找到了答案。
我将 addressBook for 循环转换为一个范围 (len(addressBook)) 并且它起作用了。
for i in range(len(addressBook)):
首先,您在 'James Roberts
之后的 addressBook
文字中缺少 '
。其次,问题是您在做 addressBook[i][key]
而不是 i[key]
。 i
已经引用了包含在 addressBook
中的字典,因此您的代码试图使用 list
的元素作为自身的索引。
def listAll(addressBook, addressFields):
for i in addressBook:
for key in addressFields:
print('{} {}'.format(key, i[key]))
Python 3-友好一行:
def listAll(addressBook, addressFields):
print(*('{} {}'.format(j, i[j]) for i in addressBook for j in addressFields), sep='\n')
#!/usr/bin/python
addressBook = [{'Nickname': 'Jimmy', 'Name': 'James Roberts', 'Address': '2/50 Robe Street', 'Phone': '0273503342'},{'Nickname': 'Bob', 'Name': 'Robert', 'Address': '1 Vivan Street', 'Phone': '067578930'}]
addressFields = ['Nickname', 'Name', 'Address', 'Phone']
def listAll(addressBook, addressFields):
for i in addressBook:
for val in addressFields:
print("{0} {1}".format(val, i[val]))
listAll(addressBook, addressFields)
或者在一行中:
print('\n'.join(element for element in [j+" "+ i[j] for i in addressBook for j in addressFields]
))