繁体   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