从字典列表中的字符串号中删除逗号(,)

时间:2020-05-06 06:48:26

标签: python list dictionary replace

我有一个词典列表::示例数据::这样,我有n个数据。

this.people$ = this.userService.getMerchantsBySearch(searchTerm).pipe(...)

我尝试过

datas = [{"_id":"1234as", "Total students":"123,321", "TotalPresent":"321,345"}, 
    {"_id":"1234asas","TotalStudents":"343,431","TotalPresent":"541,656"}]

我只想从TotalStudents和TotalPresent中删除逗号,并替换数据中的值。

编辑1

在我的字典列表中,我也具有以下值:

for data in datas:
    for i in data.values():
        re.sub('[^A-Za-z0-9]+', '', i)
    datas.append(i)

此处,键TotalStudents中的值为“ NA”,TotalPresent为“”。有什么方法可以替换出现的“ NA”或“”替换为“ 0”。

3 个答案:

答案 0 :(得分:1)

如果要替换特定键的值,请确保键相同,因为示例中的第一个字典具有Total Students,而第二个字典具有TotalStudents

尝试一下:

datas = [{"_id": "1234as", "Total Students": "123,321", "TotalPresent": "321,345"},
         {"_id": "1234asas", "Total Students": "343,431", "TotalPresent": "541,656"}]

for d in datas:
    d["Total Students"] = d["Total Students"].replace(",", "")
    d["TotalPresent"] = d["TotalPresent"].replace(",", "")

print(datas)
# output: [{'_id': '1234as', 'Total Students': '123321', 'TotalPresent': '321345'}, {'_id': '1234asas', 'Total Students': '343431', 'TotalPresent': '541656'}]

如果要替换所有键中的逗号,可以尝试(但要记住,在这种情况下,字典的所有值都必须是字符串):

datas = [{"_id": "1234as", "Total Students": "123,321", "TotalPresent": "321,345"},
         {"_id": "1234asas", "Total Students": "343,431", "TotalPresent": "541,656"}]

for d in datas:
    for k in d:
        d[k] = d[k].replace(",", "")

答案 1 :(得分:1)

您可以遍历字典中的键,值对。并在删除逗号后替换该键的值。

import re

datas = [{"_id": "1234as", "Total Students": "123,321", "TotalPresent": "321,345"},
         {"_id": "1234asas", "TotalStudents": "343,431", "TotalPresent": "541,656"}]


for data in datas:
    for key, value in data.items():
        print(key, value)
        value = re.sub('[^A-Za-z0-9]+', '', value)
        data[key] = value

print(datas)

结果

_id 1234as
Total Students 123,321
TotalPresent 321,345
_id 1234asas
TotalStudents 343,431
TotalPresent 541,656

[{'_id': '1234as', 'Total Students': '123321', 'TotalPresent': '321345'}, 
 {'_id': '1234asas', 'TotalStudents': '343431', 'TotalPresent': '541656'}]

这是使代码正常工作的一种方法,因此可以始终替换所有值。如有必要,您需要添加自己的支票以使其更智能。

编辑

要捕获“ NA”和“”值,我添加了一些if语句。它很简单,并且很接近您自己的代码。

import re

datas = [{"_id":"1234as","TotalStudents":"123,321","TotalPresent":"321,345"},
        {"_id":"1234asas","TotalStudents":"343,431","TotalPresent":"541,656"},
         {"_id":"9934 asas","TotalStudents":"NA","TotalPresent":""}]


for data in datas:
    print(data)
    for key, value in data.items():

        if key == "TotalStudents":
            if value == "NA":
                value =  "0"
            else:
                value = re.sub('[^A-Za-z0-9]+', '', value)
        elif key == "TotalPresent":
            if not value:
                value = "0"
            else:
                value = re.sub('[^A-Za-z0-9]+', '', value)

        data[key] = value

print()
for data in datas:
    print(data)

结果

{'_id': '1234as', 'TotalStudents': '123321', 'TotalPresent': '321345'}
{'_id': '1234asas', 'TotalStudents': '343431', 'TotalPresent': '541656'}
{'_id': '9934 asas', 'TotalStudents': '0', 'TotalPresent': '0'}

要使代码更高效,可以将新值直接放在数据中。在这种情况下,您不再需要用自己的值替换“ _id”。

import re

datas = [{"_id":"1234as","TotalStudents":"123,321","TotalPresent":"321,345"},
        {"_id":"1234asas","TotalStudents":"343,431","TotalPresent":"541,656"},
         {"_id":"9934 asas","TotalStudents":"NA","TotalPresent":""}]


for data in datas:
    print(data)
    for key, value in data.items():

        if key == "TotalStudents":
            if value == "NA":
                data[key] = "0"
            else:
                data[key] = re.sub('[^A-Za-z0-9]+', '', value)
        elif key == "TotalPresent":
            if not value:
                data[key] = "0"
            else:
                data[key] = re.sub('[^A-Za-z0-9]+', '', value)

print()
for data in datas:
    print(data)

答案 2 :(得分:0)

re.sub不能就地工作-它确实返回更改后的str。更一般地说,str是不可变的函数,处理它们不能就地工作。使用re.sub的解决方案可能如下所示:

import re
datas = [{"_id":"1234as","Total Students":"123,321","TotalPresent":"321,345"},
{"_id":"1234asas","TotalStudents":"343,431","TotalPresent":"541,656"}]
cleandatas = []
for data in datas:
    cleandatas.append({k:re.sub('[^A-Za-z0-9]+', '', v) for k,v in data.items()})
print(cleandatas)

输出:

[{'_id': '1234as', 'Total Students': '123321', 'TotalPresent': '321345'}, {'_id': '1234asas', 'TotalStudents': '343431', 'TotalPresent': '541656'}]

我用dict-理解来创建新的清理过的dict s