Python:删除字典中的空格返回'list'对象没有属性'rstrip'

问题描述 投票:0回答:2

我有一个字典,在我要删除的项目的开头和结尾都有空格。

Alpha = {'Active': [{'Last': u' 0.023', 'Name': u' Bard1 Life Sciences Limited                                       


                ', 'Vol': u' 439,937,304', 'pc': u' 130.0', 'Change': u' 0.013', 'Stock': 'BD1'}, {'Last': u'
 0.048', 'Name': u' Patrys Ltd                                                                               

                                                                                                      ', 'Vol
': u' 60,198,817', 'pc': u' -9.4', 'Change': u' -0.005', 'Stock': 'PAB'}, {'Last': u' 0.008', 'Name': u' Ecli
pse Metals Limited.                                                                                          

                                                                              ', 'Vol': u' 41,707,516', 'pc':
 u' -33.3', 'Change': u' -0.004', 'Stock': 'EPM'}]}

我想在末尾删除Name的空格,并删除Last,Change和pc开头的空格。

当我使用{key: value.rstrip() for key, value in Alpha.items()}时,它返回AttributeError: 'list' object has no attribute 'rstrip'。当我使用lstrip时也是如此。

什么是pythonic方法来解决错误?

python dictionary strip
2个回答
3
投票

在解决这个问题之前,你必须了解你的结构:你没有开​​头的空格字典,但是字典字符串→字典列表,其值是一些字符串,其周围有空格。

这听起来很复杂,而且(有点)。但这就是为什么你的方法不起作用的原因。

我会递归地做:

def my_strip(item):
    if isinstance(item, str) or isinstance(item, unicode):
        return item.rstrip()
    if isinstance(item, list):
        return [my_strip(i) for i in item]
    if isinstance(item, dict):
        return {k: my_strip(v) for k, v in item.items()}
    return item

这样,如果您这样做,所有级别都会得到适当的处理


1
投票

你错过了Alpha['Active']里面的名单。

数据以下列方式维护:

Alpha = dict(key: list[ dict(key, value), dict(key, value), dict(key, value)])

我们想要删除列表中实际值的左右空格。

您可以使用:

for index, itemdict in enumerate(Alpha['Active']):
    Alpha['Active'][index] = {key: value.strip() for key, value in itemdict.items()}

最后,您可以在不使用空格的情况下查看数据:

# to print the data
for item in Alpha['Active']:
    print(item)

结果:

{'Last': '0.023', 'Name': 'Bard1 Life Sciences Limited', 'Vol': '439,937,304', 'pc': '130.0', 'Change': '0.013', 'Stock': 'BD1'}
{'Last': '0.048', 'Name': 'Patrys Ltd', 'Vol': '60,198,817', 'pc': '-9.4', 'Change': '-0.005', 'Stock': 'PAB'}
{'Last': '0.008', 'Name': 'Ecli\npse Metals Limited.', 'Vol': '41,707,516', 'pc': '-33.3', 'Change': '-0.004', 'Stock': 'EPM'}
© www.soinside.com 2019 - 2024. All rights reserved.