按列表顺序打印字典

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]
))