【问题标题】:Remove comma(,) from string number in dictionary list从字典列表中的字符串编号中删除逗号(,)
【发布时间】:2020-08-21 01:12:08
【问题描述】:

我有一个字典列表:: 示例数据:: 像这样我有 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 中删除逗号 (,) 并替换 datas 中的值。

编辑 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”。

【问题讨论】:

    标签: python list dictionary replace


    【解决方案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)
    

    【讨论】:

    • 我发现您的回答对提出的问题很有帮助,并将接受此作为答案。但在我关闭此线程之前,您能否查看已编辑问题中提到的案例
    • 我添加了一个简单的调整和一个额外的步骤,用于一些简单的效率提升。我希望它有所帮助。请注意,您的数据中有错字:“Totalstudents”。
    • 将 0 更改为“0”以将字符串放回数据中
    【解决方案2】:

    re.sub 不能在原地工作 - 它确实返回更改后的str。更一般地说,strs 是处理它们的不可变函数,它们不能就地工作。使用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-comprehension 创建了新的清理dicts

    【讨论】:

      【解决方案3】:

      如果要替换特定键的值,请确保键相同,因为示例中的第一个字典具有 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'}]
      
      

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

      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(",", "")
      

      【讨论】:

        猜你喜欢
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 2010-09-05
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 2021-03-21
        相关资源
        最近更新 更多