簡體   English   中英

嵌套字典的Python列表

[英]Python lists of nested dictionaries

最初,我必須創建一個接收人的屬性並返回如下所示結構的函數:

Team:
    Name: Real Madrid
    President:
        Name: Florentino Perez
        Age: 70
        Country: Spain
        Office: 001
    Coach: 
        Name: Carlo Ancelotti
        Age: 55
        Country: Italy
        Office: 006
        Coach License: 456789545678
    Players:
        - Name: Cristiano Ronaldo
          Age: 30
          Country: Portugal
          Number: 7
          Position: Forward
          Golden Balls: 1
        - Name: Chicharito
          Age: 28
          Country: Mexico
          Number: 14
          Position: Forward
        - Name: James Rodriguez
          Age: 22
          Country: Colombia
          Number: 10
          Position: Midfielder
        - Name: Lucas Modric
          Age: 28
          Country: Croatia
          Number: 19
          Position: Midfielder

此結構還包含有關其他俱樂部的信息。 我設法通過以下功能做到這一點:

def create_person(name, age, country, **kwargs):
    info={"Name": name, "Age": age, "Country": country}
    for k,v in kwargs.iteritems():
        info[k]=v

    return info

我使用此功能創建了一個嵌套詞典列表,並為每個團隊顯示正確的結構。 例:

teams = [
    {
        "Club Name": "Real Madrid",
        "Club President": create_person("Florentino Perez", 70, "Spain", Office="001"),
        "Club's Coach": create_person("Carlo Angelotii", 60, "Italy", Office="006", CoachLicense="456789545678"),
        "Players": {
            "Real_Player1": create_person("Cristiani Ronaldo", 30, "Portugal", Number="7", Position="Forward", GoldenBalls="1"),
            "Real_Player2": create_person("Chicharito", 28, "Mexic", Number="14", Position="Forward"),
            "Real_Player3": create_person("James Rodriguez", 22, "Columbia", Number="10", Position="Midfilder"),
            "Real_Player4": create_person("Lucas Modric", 28, "Croatia", Number="19", Position="Midfilder")
            }
        },
    {
        "Club Name": "Barcelona",
        "Club President": create_person("Josep Maria Bartolomeu", 60, "Spain", Office="B123"),
        "Club's Coach": create_person("Luis Enrique Martinez", 43, "Spain", Office="B405", CoachLicense="22282321231"),
        "Players": {
            "Barcelona_Player1": create_person("Lionel Messi", 28, "Argentina", Number="10", Position="Forward", GoldenBalls="3"),
            "Barcelona_Player2": create_person("Xavi Hernandez", 34, "Spain", Number="6", Position="Midfilder"),
            "Barcelona_Player3": create_person("Dani Alvez", 28, "Brasil", Number="22", Position="Defender"),
            "Barcelona_Player4": create_person("Gerard Pique", 29, "Spain", Number="22", Position="Defender")
            }
        }
    ]

到目前為止一切都很好。

我卡住的部分是:創建一個接收團隊名稱的函數print_president打印以下輸出:

球隊:皇家馬德里主席:弗洛倫蒂諾·佩雷斯年齡:70國家:西班牙辦公室:001

我可以使用一個變量來顯示它,但是我需要一個函數,而且我不知道該如何解決。 請幫忙!

當您嘗試解決問題(或提出問題)時,請首先盡可能簡化。 您的print_president()函數使用一個團隊名稱,然后打印有關該團隊的各種信息。 每個團隊都是一本具有各種屬性的字典。 因此,該問題的簡化版本可能如下所示:

teams = [
    {
        'name': 'Real Madrid',
        'pres': 'Florentino',
    },
    {
        'name': 'Barcelona',
        'pres': 'Josep',
    },
]

def print_president(team_name):
    for t in teams:
        # Now, you finish the rest. What should we check here?
        ...

print_president('Barcelona')

我想不出一種僅憑團隊名稱就能做到這一點的方法,因為您將不得不知道要看哪個命令。 我認為是這樣的:

def print_president(team):
    print 'Team: {team} President: {president} Age: {age} Country: {country} Office: {office}'.format(
        team=team['Club Name'],
        president=team['Club President']['Name'],
        age=team['Club President']['Age'],
        country=team['Club President']['Country'],
        office=team['Club President']['Office']
    )

如果您想瀏覽列表中的所有團隊,請傳入兩個參數:teams_list和team_name:

def print_president(teams_list,team_name):
    for team in teams_list:
        if team_name in team.values():
            print 'Team: {team} President: {president} Age: {age} Country: {country} Office: {office}'.format(
                team=team['Club Name'],
                president=team['Club President']['Name'],
                age=team['Club President']['Age'],
                country=team['Club President']['Country'],
                office=team['Club President']['Office']
            )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM