删除字典对象中的空格

时间:2019-09-17 15:47:24

标签: python

严重的是,这似乎很容易,但是到目前为止,我发现的任何方法都没有奏效。

我有一个像这样的字典对象:

PHP_ARG_ENABLE([test2],
  [whether to enable test2 support],
  [AS_HELP_STRING([--enable-test2],
    [Enable test2 support])],
  [no])

if test "$PHP_TEST2" != "no"; then
  AC_DEFINE(HAVE_TEST2, 1, [ Have test2 support ])

  PHP_NEW_EXTENSION(test2, test2.c, $ext_shared)
fi

但是我需要这样:

dict = {'                      key1                    ': ["                value1              ", "                value1_1              "], '                      key2                    ': '                value2             ', '                      key3                    ': ['                value3              ', '                value3_1              '], '                      key4                    ': '                value4              ', '                      key5                    ': ['                value5              ', '                value5_1              ', '                value5_2              ']}

因为有些值是列表,所以我尝试了这样的for循环(请使用有趣的语法,我现在只需要使其工作即可,以后将改进语法):

{'key1': ["value1", "value1_1"], 'key2': 'value2', 'key3': ['value3', 'value3_1'], 'key4': 'value4', 'key5': ['value5', 'value5_1', 'value5_2']

那没有用。然后我尝试了:

    for k, v in dict.items():
        if type(v) is list:
            k.replace(' ','')
            k.replace(" ","")
            for i in v:
                i.replace(' ','')
                i.replace(" ","")
        else:
            k.replace(' ','')
            k.replace(" ","")
            i.replace(' ','')
            i.replace(" ","")

那也没做。帮助!!!

6 个答案:

答案 0 :(得分:3)

使用 dict理解列表理解strip()并用单行代码进行尝试:

{k.strip():[s.strip() for s in v] if type(v) is list else v.strip() for k, v in d.items()}

返回:

{'key1': ['value1', 'value1_1'],
 'key2': 'value2',
 'key3': ['value3', 'value3_1'],
 'key4': 'value4',
 'key5': ['value5', 'value5_1', 'value5_2']}

这绝对是最pythonic的方式:-)

答案 1 :(得分:1)

如果您想使用字典理解:

{key.strip():[x.strip() for x in value] if type(value) == list else value.strip() for key, value in dict.items()}

答案 2 :(得分:1)

str.strip完全可以满足您的需求。我建议创建一种简单的方法来删除前导/后缀空格,并使用非常简单的dict理解( PS :不要将内建函数用作变量名!我将dict替换为以下data供参考):

data = {'                      key1                    ': ["                value1              ", "                value1_1              "], '                      key2                    ': '                value2             ', '                      key3                    ': ['                value3              ', '                value3_1              '], '                      key4                    ': '                value4              ', '                      key5                    ': ['                value5              ', '                value5_1              ', '                value5_2              ']}

def ostrip(o):
    try: return o.strip()
    except: return list(map(str.strip, o))


print({ostrip(k): ostrip(v) for k, v in data.items()})

ostrip上方只是尝试将其剥离,就好像它是一个字符串一样,否则通过将方法映射到列表来假定它是一个字符串列表。您可以使用else语句来捕获极端情况,尽管这取决于您。

这将导致如下结果:

{'key1': ['value1', 'value1_1'], 'key2': 'value2', 'key3': ['value3', 'value3_1'], 'key4': 'value4', 'key5': ['value5', 'value5_1', 'value5_2']}

答案 3 :(得分:0)

看似简单,并且替换了所有空格,但是:

user.name='new name'

它将对象转换为文本,因此可以同时删除空格,而无需遍历

答案 4 :(得分:0)

您的方法几乎是正确的,但是由于您从循环中调用了k,v个变量,因此必须更新字典。

dict_spaceless = dict()
for k, v in dict.items():
  if type(v) is list:
      k = k.strip()
      v_spaceless = list()
      for i in v:
          i = i.strip()
          v_spaceless.append(i)
  else:
      k = k.strip()
      v_spaceless = v.strip()
  dict_spaceless[k]= v_spaceless
dict=dict_spaceless

此外,一个好的建议是不要通过其初始化方法来调用变量。也就是说,在快速读取代码时使用名为“ dict”的字典会非常混乱,因为在python中初始化一个空字典,我们将函数称为dict()

答案 5 :(得分:-1)

您需要遍历dict的值以查看它们是列表还是字符串-然后在每个字符串或列表值上使用rstrip()lstrip()-每个键。这些函数删除了字符串中的左/右空格-strip()也可以使用,它结合了rstrip / lstrip。我只是创建一个新字典来保存这些字典。

dict = {'                      key1                    ': ["                value1              ", "                value1_1              "], '                      key2                    ': '                value2             ', '                      key3                    ': ['                value3              ', '                value3_1              '], '                      key4                    ': '                value4              ', '                      key5                    ': ['                value5              ', '                value5_1              ', '                value5_2              ']}

new_dict = {}

for i in dict.keys():
    if type(dict[i]) is list:
        new_dict[i.rstrip().lstrip()] = [j.rstrip().lstrip() for j in dict[i]]
    else:
        new_dict[i.rstrip().lstrip()] = dict[i].rstrip().lstrip()

print(new_dict)
# {'key1': ['value1', 'value1_1'], 'key2': 'value2', 'key3': ['value3', 'value3_1'], 'key4': 'value4', 'key5': ['value5', 'value5_1', 'value5_2']}
相关问题