【问题标题】:Search list of dictionaries using string and append it into another list of the same format使用字符串搜索字典列表并将其附加到另一个相同格式的列表中
【发布时间】:2019-11-18 12:13:41
【问题描述】:

我有一个对象列表

array = [

    {'Path': '/', 'UserName': 'sns-1', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'user1', 'UserId': '456'}, 
    {'Path': '/', 'UserName': 'user2', 'UserId': '789'},
    {'Path': '/', 'UserName': 'sns-22', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'sns-3344', 'UserId': '456'} 

]

我想搜索以 sns 开头的用户名并将其分隔到另一个列表中。有人可以告诉我怎么做吗

预期输出:

array1 = [

    {'Path': '/', 'UserName': 'sns-1', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'sns-22', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'sns-3344', 'UserId': '456'} 
]

array2 = [

    {'Path': '/', 'UserName': 'user1', 'UserId': '456'}, 
    {'Path': '/', 'UserName': 'user2', 'UserId': '789'},

]

【问题讨论】:

  • "startswith" 很好用,谢谢大家

标签: python python-3.x string list dictionary


【解决方案1】:

你可以这样做:

array = [

    {'Path': '/', 'UserName': 'sns-1', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'user1', 'UserId': '456'}, 
    {'Path': '/', 'UserName': 'user2', 'UserId': '789'},
    {'Path': '/', 'UserName': 'sns-22', 'UserId': '123'}, 
    {'Path': '/', 'UserName': 'sns-3344', 'UserId': '456'} 

]

array1 = [x for x in array if x['UserName'].startswith('sns')]
array2 = [x for x in array if not x['UserName'].startswith('sns')]

输出:

>>> array1
[{'Path': '/', 'UserName': 'sns-1', 'UserId': '123'},
 {'Path': '/', 'UserName': 'sns-22', 'UserId': '123'},
 {'Path': '/', 'UserName': 'sns-3344', 'UserId': '456'}]
>>> array2
[{'Path': '/', 'UserName': 'user1', 'UserId': '456'},
 {'Path': '/', 'UserName': 'user2', 'UserId': '789'}]

【讨论】:

    【解决方案2】:

    这不是pythonic,逻辑上还是要清楚,或者你可以参考其他答案:

    array1=[]
    array2=[]
    for elem in array:
        if elem['UserName'].startswith('sns'):
            print(array1.append(elem))
        else:
            print(array2.append(elem))
    

    【讨论】:

      【解决方案3】:

      检查此代码

      array1 = []
      array2 = []
      for dictionary in array:
          if 'sns' in dictionary['UserName']:
              array1.append(dictionary)
          else:
              array2.append(dictionary)
      

      【讨论】:

      • 用户名应以“sns”开头,但您的代码也将采用用户名之间包含“sns”的用户名。喜欢-'User1-sns'
      【解决方案4】:

      你可以这样做:

      array1 = []
      array2 = []
      for i in range(len(array)):
          if array[i]['UserName'].startswith('sns'):
              array1.append(array[i])
          else:
              array2.append(array[i])
      
      
      print('array1', array1)
      print('array2', array2)
      
      

      【讨论】:

      • 他需要用户名以“sns”开头,您的代码打印用户名包含“sns”,无论其位置如何
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2011-01-04
      • 2021-06-08
      • 2022-06-23
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多