python中循环的字典列表到元组列表

2024-05-28 21:13:38 发布

您现在位置: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')]

如何避免元组中的重复

谢谢


Tags: namestreetmiddlenewtitleaddresselsaprogram
2条回答

您正在创建一个新的元组,然后将其追加,只需将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]

How do I avoid the repetitions in the tuples?

不使用+=?当您写入new_tuple += ...时,它将连接现有的new_tuple和右边的任何内容,并将其设置为新的new_tuple。所以你从()开始,然后你添加Alfred,得到('Alfred',),将其附加到列表中,然后添加Brenda和('Alfred', 'Brenda'),并将那个添加到列表中,等等

您可以完全删除new_tuple,并将每个元组文本直接附加到输出列表中

相关问题 更多 >

    热门问题