【问题标题】:List of Dictionary to list of tuples for loop in python字典列表到python中循环的元组列表
【发布时间】:2020-05-10 21:37:51
【问题描述】:

我正在尝试为字典列表创建条件 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。此外,只有在没有中间名时才添加。

标签: python list loops dictionary tuples


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如何避免元组中的重复?

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多