python-3.x - 从字典列表中提取元组列表,一些值用逗号和单引号分隔,一些没有
问题描述
我有一个字典列表,每个字典包含:
- 名
- 中间名字
- 姓
- 标题
- 地址
- 电子邮件地址
- 忠诚度计划 针对一位客户。其中一些信息可能会丢失
segment = [{'first-name': 'Elsa', 'last-name': 'Frost', 'title': 'Princess', 'address': '33 Castle Street, London', 'loyalty-program': 'Gold'}, {'first-name': 'Anna', 'last-name': 'Frost', 'title': 'Princess', 'loyalty-program': 'Platinum'}, {'first-name': 'Harry', 'middle-name': 'Harold', 'last-name': 'Hare', 'title': 'Mr', 'email-address': 'harry.harold@hare.name', 'loyalty-program': 'Silver'}]
对于有物理地址的客户,我需要提取一个元组列表。每个元组代表一个客户,并包含他们的头衔、名字、中间名和姓氏(如果已定义)以及邮寄地址。
我的代码似乎正在运行。
但是,在每个元组中,客户名称的整个而不是单个部分都需要有单引号。地址周围还需要有引号。地址和全名需要用逗号隔开。
('Princess Elsa Frost', '33 Castle Street, London')
我的代码返回了正确的信息,但患者姓名的元素由逗号和单引号分隔
def process_clients(segment):
#Creating a list to contain tuples with client full name and mailing address.
updated = []
#Interacting through each dictionary, which represents each client
for dic in segment:
newclient=[]
#Adding clients with a mailing address
try:
add = dic["address"]
except:
continue
#Adding, in order, the "title", "first-name", "middle-name", "last-name" and "address" of each client
for data in ["title", "first-name", "middle-name", "last-name", "address"]:
try:
value = dic[data]
newclient.append(value)
#If "title", "first-name", "middle-name" or "last-name" is not present in a clients data, no action is taken
except:
pass
#Additing the tuples with extracted client data to the created list
updated.append(tuple(newclient))
return updated
process_clients(segment)
[('Princess',' Elsa ',' Frost ', '33 Castle Street, London')]
解决方案
看起来你想从:
data = ('Princess', ' Elsa ', ' Frost ', '33 Castle Street, London')
至
data = ('Princess Elsa Frost', '33 Castle Street, London')
要摆脱 and 中的额外空格' Elsa '
,' Frost '
您可以使用列表推导:
data = [word.strip() for word in data]
对于每一个word
in data
,上面的行去掉了开头和结尾的空白,然后把它全部放在一个列表中。
现在我们有:
data = ['Princess', 'Elsa', 'Frost', '33 Castle Street, London']
要组合前三个元素,请使用.join()
:
data = (' '.join(data[:-1]), data[-1])
' '.join(data[:-1])
获取除最后一个元素之外的所有元素,并将它们连接成一个字符串,其中每个元素由 . 分隔' '
。data[-1]
是列表中的最后一个元素。
所以现在是:
data = ('Princess Elsa Frost', '33 Castle Street, London')
推荐阅读
- r - 与上一时期相比,显示增加/减少值的变异列
- python - 使用 apt_pkg 以编程方式安装 debian 软件包时出错
- json - 如何将原始字典转换为 JSON 字符串?
- javascript - 如何使用 javascript 和 jquery 在 html 中动态创建 div 卡?
- elixir - 如何查看一个文件是从另一个文件导入还是作为入口点运行?
- networking - 当客户端尝试连接到接入点并且主路由器中有可用位置时重定向客户端
- ubuntu - SetupPOS 在 Linux Ubuntu 18.04 中找不到或加载主类 com.epson.pos.SetupPOS.SetupPOS
- asp.net-core - 使用 NET Core 和 EF Core 构建谓词
- asp.net - 如何使用管理 api 在 Auth0 用户日志中获取 location_info(国家名称)?
- hyperledger-fabric - Hyperledger Fabric 上的 Gossip 协议