python3合并两个列表考虑一个用毕_在python3中合并列表列表

我改变了你的格式,做到了你想要的。我用user键将所有子列表转换为dict。在

因为它更容易合并dict和子列表中user的顺序并不重要。在

最后一步是迭代合并的list1和{}的dict,并执行您的特殊操作。按照我的理解,是取list1的前一个数,并将其与list2合并。然后重新创建所需的子列表。在from itertools import chain

from collections import defaultdict

list1 = [['user1', 186, 'Feb 2017, Apr 2017', 550, 555], ['user2', 282, 'Mai 2017', 0, 3579], ['user3', 281, 'Mai 2017', 10, 60]]

list2 = [['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 0, 740],['user2', 282, 'Feb 2017', 0, 1000], ['user4', 288, 'Feb 2017', 60, 10]]

# Transform list to dict with key as 'userN'

def to_dict(lst): return {x[0]: x[1:] for x in lst}

# Now create a dict that combined list of user1..N+1

tmp_dict = defaultdict(list)

for k, v in chain(to_dict(list1).items(), to_dict(list2).items()):

tmp_dict[k].append(v)

desired_output = []

for k, v in tmp_dict.items():

if len(v) == 2:

v[1][-2] = v[0][-2] # Take the before last of list1 to remplace with before last one of list2

desired_output.append([k] + v[1])

else:

desired_output.append([k] + v[0])

print(desired_output)

输出:

^{pr2}$

编辑

看来我犯了一个错误,你的list1必须检查list2的所有内容,在这种情况下,你应该先做一个list2的{},然后再应用你的特定条件。例如:from itertools import chain

list1 = [['user1', 186, 'Feb 2017, Apr 2017', 550, 555], ['user2', 282, 'Mai 2017', 0, 3579], ['user3', 281, 'Mai 2017', 10, 60]]

list2 = [['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 0, 740],['user2', 282, 'Feb 2017', 0, 1000], ['user4', 288, 'Feb 2017', 60, 10]]

# Transform list to dict with key as 'userN'

def to_dict(lst): return {x[0]: x[1:] for x in lst}

# First, transfrom list2 to dict

list2_dict = {}

for k, v in to_dict(list2).items():

list2_dict[k] = v

# Then iterate on list1 to compare

desired_output = []

for k, v in to_dict(list1).items():

if k in list2_dict: # key of list1 exists in list2

list2_dict[k][-2] = v[-2] # replace value

desired_output.append([k] + list2_dict[k]) # Then add list2

list2_dict.pop(k) # And remove it from old dict

else: # list1 does not exists in list2

v[-1] = 0 # Set last element to zero

desired_output.append([k] + v)

for k, v in list2_dict.items(): # Now add elements present only in list2

desired_output.append([k] + v)

print(desired_output)

输出:[['user1', 186, 'Feb 2017, Mar 2017, Mai 2017', 550, 740], ['user2', 282, 'Feb 2017', 0, 1000], ['user3', 281, 'Mai 2017', 10, 0], ['user4', 288, 'Feb 2017', 60, 10]]

注意:我们可以去掉defaultdict,因为同一个密钥不会被添加两次。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值