簡體   English   中英

字典列表到 python 中循環的元組列表

[英]List of Dictionary to list of tuples for loop in python

我正在嘗試為字典列表創建條件 for 循環。

詞典列表如下:

CLIENTS_EXAMPLE = [
    {
        "first-name": "Elsa",
        "last-name": "Frost",
        "title": "Princess",
        "address": "33 Castle Street, London",
        "loyalty-program": "Gold",
    },
    {
        "first-name": "Anna",
        "last-name": "Frost",
        "title": "Princess",
        "address": "34 Castle Street, London",
        "loyalty-program": "Platinum",
    },
{
        "first-name": "Ben",
        "last-name": "Frost",
        "middle-name": "john",
        "title": "Prince",
        "address": "36a Castle Street, London",
        "loyalty-program": "Platinum",
    },

    {
        "first-name": "Harry",
        "middle-name": "Harold",
        "last-name": "Hare",
        "title": "Mr",
        "email-address": "harry.harold@hare.name",
        "loyalty-program": "Silver",
    },
    {
        "first-name": "Leonnie",
        "last-name": "Lion",
        "title": "Mrs",
        "loyalty-program": "Silver",
    },
]

我必須打印任何具有已知地址(不是電子郵件地址)的個人,並打印出他們的名字、中間名(如果有)和姓氏以及地址。

輸出應如下所示:

[('Princess Elsa Frost', '33 Castle Street, London'),('Prince Ben John Frost', '36a Castle Street, London') ... etc]

我已經設法過濾掉這些項目並將它們添加到元組列表中:


def process_clients(segment):

   new_list = []
   new_tuple =()
      for x in segment: #separates the dictionary from the list
         if "address" in x:
             if "middle-name" in x:
                new_tuple += (x["title"] + " " + x["first-name"] + " " + x["middle-name"] + " " + x["last-name"]), (x["address"])
             else:
                new_tuple += (x["title"] + " " + x["first-name"] + " "  + x["last-name"]), (x["address"])
                new_list.append(new_tuple)

       print(new_list)

process_clients(CLIENTS_EXAMPLE)

我得到的是以下輸出:


[('Princess Elsa Frost', '33 Castle Street, London'), ('Princess Elsa Frost', '33 Castle Street, London', 'Princess Anna Frost', '34 Castle Street, London'), ('Princess Elsa Frost', '33 Castle Street, London', 'Princess Anna Frost', '34 Castle Street, London', 'Prince Ben john Frost', '36a Castle Street, London')]

如何避免元組中的重復?

謝謝

你正在制作一個新的元組然后附加到它,你只需要將new_tuple初始化移動到 for 循環中

for x in segment:
    new_tuple =()

您還可以使用列表理解

[("{} {} {}{}".format(
    x["title"],
    x["first-name"],
    x["middle-name"] + " " if "middle-name" in x else "",
    x["last-name"])), x["address"]) for x in segment]

如何避免元組中的重復?

不要使用+= 當您編寫new_tuple +=...時,它將連接現有的new_tuple和右邊的任何內容,並將其設置為新的new_tuple 所以你從 () 開始,然后你添加 Alfred 這樣你就得到('Alfred',) ,將它附加到列表中,然后你添加 Brenda 並得到('Alfred', 'Brenda')並將其添加清單等...

您可以完全刪除new_tuple並將每個元組文字直接附加到輸出列表。

暫無
暫無

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

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