在 Python 语言中从列表元素中删除撇号

Posted

技术标签:

【中文标题】在 Python 语言中从列表元素中删除撇号【英文标题】:Removing apostrophe from elements of list in Python language 【发布时间】:2015-03-25 23:17:51 【问题描述】:

我正在 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'

【问题讨论】:

“看起来”是什么意思? 为什么要删除撇号? python中的字符串用撇号(实际上是引号)括起来 第一行代码是字符串列表,第二行是变量列表。它们不一样。 .viewkeys 用于字典。您不能在字符串上使用它们,没有称为字符串视图键的“方法”。 你到底想在这里实现什么?你的程序(或这部分)的目标是什么 【参考方案1】:

如果如你所说,你有

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 是一种用于字典 的方法,没有字符串。你可以在x 上调用viewkeys,因为它是一本字典。你不能在'x' 上调用viewkeys,因为它是一个字符串。

如果要获取字典,需要使用x,而不是'x'

【讨论】:

我明白这一点。但是如何做到这一点for key in features.keys(): globals().setdefault(key,get_count(features[key])) dicts.append(key) 在这里我正在创建字典并将它们的名称附加到字典列表中。但它们被附加为 ['x','y','z'] 而不是 [x,y,z]。有大约 1000 个字典要附加,因此我无法手动完成。有没有办法绕过这个? 你能帮忙吗? 确保您没有将密钥添加到您的列表中。您想要添加 ,因为它们包含实际的字典。【参考方案2】:

容器的字符串形式总是使用容器项目的repr(否则会产生歧义)。

没有人阻止您进行自己的格式化,例如:

def showmyway(alist):
    return '[]'.format(','.join(str(s) for s in alist))

然后例如

print(showmyway(somelist))

当然,你也会遭受不可避免的歧义:例如,

showmyway(['a', 'b', 'c'])

showmyway(['a,b', 'c'])

将返回完全相同的字符串,尽管列表非常不同。

【讨论】:

我的列表属于'showmyway(['a,b', 'c'])'的第二类。有没有办法摆脱它。@Alex Martelli @rombi,您希望如何显示这样一个包含两个项目的列表而不是一个包含三个单字母项目的列表?给出清晰、完整的规范,并且很容易为它们编写代码。我不认为 任何 关于不在字符串周围加上引号的模糊行的规范甚至可以以广泛通用的方式令人满意,但也许你可以完全指定一个非常特殊的情况(你的规范到目前为止是模糊的、令人困惑的和自相矛盾的,我猜这是很多反对票的原因,但也许你可以做得更好!)。 感谢您对我的信任。 for key in features.keys(): globals().setdefault(key,get_count(features[key])) dicts.append(key) 在这里我正在创建字典并将它们的名称附加到字典列表中。但它们被附加为 ['x','y','z'] 而不是 [x,y,z]。我希望字典的名称以 [x,y,z] 格式附加,不带任何撇号,以便我可以在其上调用 viewkeys() 方法。查看我更新的问题

以上是关于在 Python 语言中从列表元素中删除撇号的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从数组中删除空元素

R语言_list()函数用法

C语言 删除所有相同值的元素

在 SpriteKit/Swift 中从数组中删除元素

python 从列表中取出一个字典元素

python从列表中删除元素