我正在尝试开发一种在字典列表中进行迭代时可以以某种方式打印的格式。

引发错误:“元组索引超出范围”

我已经看过其他几个与主题相似的问题,并且知道您无法键入数值和format()。至少那是我从中得到的。

就我而言,我没有使用数值,因此不确定为什么它不起作用。我想我知道如何使用其他(%S)格式化方法来解决此问题,但是尝试压缩并使我的代码更具pythonic风格。

因此,当我删除.formate语句并保留索引参数时,我得到了正确的值,但是当我尝试格式化它们时,我得到了错误。

我的代码:

def namelist(names):
    n = len(names)
    return_format = {
    0: '{}',
    1: '{} & {}',
    2:'{}, {} & {}'
    }
    name_stucture = return_format[n-1]
    for idx, element in enumerate(names):
        print name_stucture.format(names[idx]["name"])


寻找这种情况的发生原因以及解决方法,谢谢!

最佳答案

这个问题似乎比您要尝试的要简单:

formats = [None, '{}', '{} & {}']

def namelist(names):
    length = len(names)

    if length > 2:
        name_format = '{}, ' * (length - 2) + formats[2]  # handle any number of names
    else:
        name_format = formats[length]

    print(name_format.format(*names))

namelist(['Tom'])
namelist(['Tom', 'Dick'])
namelist(['Tom', 'Dick', 'Harry'])
namelist(['Groucho', 'Chico', 'Harpo', 'Zeppo'])

# the data structure is messy so clean it up rather than dirty the function:
namelist([d['name'] for d in [{'name': 'George'}, {'name': 'Alfred'}, {'name': 'Abe'}]])


输出值

> python3 test.py
Tom
Tom & Dick
Tom, Dick & Harry
Groucho, Chico, Harpo & Zeppo
George, Alfred & Abe
>

08-05 10:55