将字典列表转换为字符串
我刚接触Python,所以如果这个问题对我来说比实际简单,请多多包涵。
我现在有一个字典列表,内容如下:
[{'directMember': 'true', 'memberType': 'User', 'memberId': 'address1@example.com'},
{'directMember': 'true', 'memberType': 'User', 'memberId': 'address2@example.com'},
{'directMember': 'true', 'memberType': 'User', 'memberId': 'address3@example.com'}]
我想生成一个简单的字符串,里面包含会员的ID,比如:
address1@example.com,
address2@example.com,
address3@example.com
但是我尝试过的所有将列表转换成字符串的方法都失败了,因为里面有字典。
有没有什么建议?
3 个回答
访问字典。
', '.join(d['memberId'] for d in L)
这些一行代码看起来不错,但初学者可能不太明白。下面我来详细解释一下:
list_of_dicts = (the list you posted)
我们有一个列表,里面的每个成员都是一个字典。这里有一个叫做 list comprehension
的东西:
[expr for d in list_of_dicts]
这就像在说 for d in list_of_dicts ...
。在这个过程中,expr
会对每个字典 d
进行计算,然后生成一个新的列表。你也可以用 if
来选择其中的一部分,具体可以查看文档。
那么,我们想要的 expr
是什么呢?在每个字典 d
中,我们想要与键 'memberId'
对应的值。也就是 d['memberId']
。所以现在的列表推导式是:
[d['memberId'] for d in list_of_dicts]
这样我们就得到了一个包含电子邮件地址的列表。接下来,我们要把这些地址用逗号连接起来,这时就用到 join
(可以查看文档了解更多):
', '.join([d['memberId'] for d in list_of_dicts])
我看到其他人发帖时在 join
的参数列表里省略了方括号,但这样也能工作。我得查查这个原因,我不知道为什么可以省略。希望这对你有帮助。
', '.join(d['memberId'] for d in my_list)
既然你说你刚开始学Python,我来给你解释一下这个是怎么回事。
str.join()
这个方法可以把一个可迭代的对象(比如列表)里的每个元素都连接起来,并且用调用这个方法的字符串作为分隔符。
传给这个方法的可迭代对象是一个生成器表达式(d['memberId'] for d in my_list)
。简单来说,这个表达式会给你一个个的元素,就像用列表推导式[d['memberId'] for d in my_list]
创建的列表里的元素,但它并不会真的创建那个列表。