将列表与对象进行比较

时间:2017-10-25 03:10:18

标签: python list dictionary

我们说我有2个名单

list1 = []
list2 = []

和字典

dict = {'SNo': 1, 'Data': "Random Data"}

让list1,list2包含具有不同SNo和数据的该字典的多个实例。一些SNo可能是相同的。但数据不一定是。

我想基于SNo合并(和排序)这两个列表,保持它们的结构,同时忽略具有相同SNo的列表。

假设:如果词典列表具有相同的SNo,则忽略list2的条目。

2 个答案:

答案 0 :(得分:1)

list1 = [{'SNo': 1, 'Data': "abc"} , {'SNo': 2, 'Data': "bcd"}, {'SNo': 2, 'Data': "def"}]
list2 = [{'SNo': 3, 'Data': "abc"} , {'SNo': 4, 'Data': "bcd"}, {'SNo': 3, 'Data': "def"}]

# to keep merged lists
final_list = []

# this list will track if sno exit alreay
sno_list = []

# take evry dict from combined list:
for d in list1+list2:
  # extract sno 
  sno = d['SNo']
  # if sno not present in sno_list add that sno.
  if sno not in sno_list:
    # add evry dict , if its sno not present in the sno_list.
    final_list.append(d)
    sno_list.append(sno)

print(final_list)    

#[{'SNo': 1, 'Data': 'abc'}, {'SNo': 2, 'Data': 'bcd'}, {'SNo': 3, 'Data': 'abc'}, {'SNo': 4, 'Data': 'bcd'}]

#sorting list

result = sorted(final_list,key=lambda d:d['SNo'])
#[{'SNo': 1, 'Data': 'abc'}, {'SNo': 2, 'Data': 'bcd'}, {'SNo': 3, 'Data': 'abc'}, {'SNo': 4, 'Data': 'bcd'}]
print(result)

答案 1 :(得分:1)

这是用于执行此操作的已排序的内置函数,

    sorted(list1+list2, key=lambda x: x['SNo'])

每个项目都根据lambda函数返回的值进行排序。现在,对于每个项目,列表将根据' id'的值进行排序。在each.You也可以按相反的顺序排序

    sorted(list1+list2, key=lambda x: x['SNo'], reverse=True)

注意:这可能不会忽略" SNo"的重复值。您可以在获取已排序的合并列表

后将其删除