首页 > 解决方案 > 从字典列表中的字符串编号中删除逗号(,)

问题描述

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

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

我试过了

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

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

编辑 1

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

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

在这里,TotalStudents 键中的值为“NA”,TotalPresent 为“”。有没有办法将出现的“NA”或“”替换为“0”。

标签: pythonlistdictionaryreplace

解决方案


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

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)

推荐阅读