使用 for 循环打印部分字典 Python

Printing parts of a dictionary by using a for loop Python

如何为 clients 字典打印出 Accountname, APIkey, APIsecret?我想以预期输出的格式打印它。

代码:

clients = {1: {'AccountName': 'Acount1', 'APIKey': 'sdhsdhjsd','APIsecret':'sadjkaskldjaskdadasdfvg'},
           2: {'AccountName':'Acount2', 'APIKey':'sdasdasdadc','APIsecret':'sdasdasdassvsdvdsfdfsaf'}}

for clients_info in clients.items():
    print("Accountname: ", clients_info['AccountName'], "APIkey: ", clients_info['APIKey'], "APIsecret: ", clients_info['APIsecret'])

预期输出:

Accountname: Acount1 APIkey: sdhsdhjsd APIsecret: sadjkaskldjaskdadasdfvg
Accountname: Acount2 APIkey: sdasdasdadc APIsecret: sdasdasdassvsdvdsfdfsaf

实际输出:

TypeError: tuple indices must be integers or slices, not str

如果您对外部字典的键不感兴趣,请迭代 clients.values() 而不是 clients.items()

for clients_info in clients.values():
     print("Accountname:", clients_info['AccountName'], "APIkey:", clients_info['APIKey'], "APIsecret:", clients_info['APIsecret'])

生产

Accountname: Acount1 APIkey: sdhsdhjsd APIsecret: sadjkaskldjaskdadasdfvg
Accountname: Acount2 APIkey: sdasdasdadc APIsecret: sdasdasdassvsdvdsfdfsaf

此外,print() 会自动在其参数之间添加 space,因此您不必在输出标签后添加额外的 space。

当使用 clients.items() 和单个可迭代对象时,每个可迭代对象都是值键的元组,即 (key, value)。如果你愿意,你可以通过 for key, value in clients.items() 来解压它们,否则你必须在 for 循环之后自己存储它们:

for client_info_tuple in clients.items():
    client_info = client_info_tuple[1]

但我认为第一个选项更简洁。因为你不需要索引(据我所知)你可以只做 clients.values() 或者在索引变量前面放一个 _ 这样你的 IDE 就不会抱怨它。

如果你使用的是 Python >= 3.6,你也可以使用 f-strings,这让这类东西看起来更漂亮,在我看来:

for _index, client_info in clients.items():
    print(
        f"Accountname: {client_info['AccountName']} "
        f"APIKey: {client_info['APIKey']} "
        f"APIsecret: {client_info['APIsecret']}"
    )

输出:

Accountname: Acount1 APIKey: sdhsdhjsd APIsecret: sadjkaskldjaskdadasdfvg
Accountname: Acount2 APIKey: sdasdasdadc APIsecret: sdasdasdassvsdvdsfdfsaf