我在python中通过迭代创建一个列表,我的列表看起来像这样
l = ['x','y','z']
我想让我的列表看起来像没有撇号的元素
l = [x,y,z]
第一种表示法的问题是我的viewkeys()将j作为字符串名称,而不是字典名称。第二种表示法工作正常。这里x,y,z是字典名称。
keys=reduce(lambda i,j: i | j ,[j.viewkeys() for j in l])
我试过strip('\'')但失败了。有什么建议吗?
如果我有:
x = {'a':1, 'b': 2, 'c':5}
y = {'b':10, 'c': 11}
z = {'e':5, 'b': 2}
l=[x,y,z]
keys=reduce(lambda i, j: i | j, [j.viewkeys() for j in l])
这段代码运行正常。但是当我试图迭代地创建l列表时它正在运行
l = ['x','y','z']
并且viewkeys()
给出错误:
AttributeError:'str'对象没有属性'viewkeys'
答案 0 :(得分:4)
如果你说,你有
x = {'a': 1, 'b': 2, 'c': 5}
y = {'b': 10, 'c': 11}
z = {'e': 5, 'b': 2}
并将这些词典放入列表
l = [x, y, z]
然后再做
keys = reduce(lambda i, j: i | j, [j.viewkeys() for j in l])
如你所说,你的代码会运行。
重要的区别是x
是一本字典。 'x'
是键盘上字符x的字符串文字。它们不可互换。
您收到错误,因为viewkeys
是词典上使用的方法,没有字符串。您可以在viewkeys
上致电x
,因为它是字典。您无法在viewkeys
上致电'x'
,因为它是一个字符串。
如果您想获取字典,则需要使用x
,而不是'x'
。
答案 1 :(得分:3)
容器的字符串形式总是使用容器项目的repr
(否则模糊不可避免)。
没有人阻止你做自己的格式化,例如:
def showmyway(alist):
return '[{}]'.format(','.join(str(s) for s in alist))
然后例如
print(showmyway(somelist))
当然,你也会遭受不可避免的歧义:例如,
showmyway(['a', 'b', 'c'])
和
showmyway(['a,b', 'c'])
将返回完全相同的字符串,尽管列表非常不同。