用列表命令打印词典

2024-03-28 22:04:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,它是一个地址簿(字典列表)和一个列表。这样做的目的是按照列表的顺序打印字典中的条目(因为dicts打乱了所有内容的顺序)。当我运行这段代码时,它抛出一个异常(如下所示)。我不知道我做错了什么,因为我已经尝试了很多不同的变化,我不断回到这个问题,想知道为什么它不工作。你知道吗

请帮忙?你知道吗

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

Tags: key代码nameinstreet列表for字典
3条回答
#!/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]
))

首先,在'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')

相关问题 更多 >