【问题标题】:Using zip to append value from list to another使用 zip 将值从列表附加到另一个
【发布时间】:2019-12-15 05:01:49
【问题描述】:

我有以下两个列表

list_1
[('Person A', [(6, "example.com/h"), (1, "example.com/xqz"), (7, "example.com/abc"), (9, "example.com/efg")]), 
('Person B', [(4, "example.com/a"), (5, "example.com/rrr"), (1, "example.com/ddd"), (4, "example.com/nnn")]),
('Person C', [(3, "example.com/g"), (1, "example.com/qqq"), (7, "example.com/fff"), (3, "example.com/vvv")])]

list_2
['2', '6', '2', '23', '2', '6', '9', '25', '2', '5', '7', '19']

list_1 包含属于个人的数据计数以及数据来自的超链接。 list_2 包括我想分别附加到 list_1 中的其他数字

dict 格式的愿望结果是这样的:

{'Person A': [((6, "example.com/h"), '2'), ((1, "example.com/xqz"), '6'), ((7, "example.com/abc"), '2'), ((9, "example.com/efg"), '23')], 
'Person B': [((4, "example.com/a"), '2'), ((5, "example.com/rrr"), '6'), ((1, "example.com/ddd"), '9'), ((4, "example.com/nnn"), '25')],
'Person C': [((3, "example.com/g"), '2'), ((1, "example.com/qqq"), '5'), ((7, "example.com/fff"), '7'), ((3, "example.com/vvv"), '19')]}

我最初的想法是简单地使用 zip 来获得我想要的结果,但我得到的结果不正确:

{'Person A': [((6, "example.com/h"), '2'), ((1, "example.com/xqz"), '6'), ((7, "example.com/abc"), '2'), ((9, "example.com/efg"), '23')], 
'Person B': [((4, "example.com/a"), '2'), ((5, "example.com/rrr"), '6'), ((1, "example.com/ddd"), '2'), ((4, "example.com/nnn"), '23')],
'Person C': [((3, "example.com/g"), '2'), ((1, "example.com/qqq"), '6'), ((7, "example.com/fff"), '2'), ((3, "https://xxx./vvv"), '23')]}

sample_dict = dict()

for i in list_1:
      result = list(zip(i[1], list_2))
      sample_dict[i[0]] = result

print(sample_dict)

试图了解我在哪里做错了,还有什么其他好的方法可以做到这一点。任何帮助将不胜感激

【问题讨论】:

  • 第一个列表来自哪里?你能分享更多你的代码吗? dict 是个好主意,但我会在你的程序中更早地创建它。此外,只是试图打印这两个列表会给我一个语法错误。
  • 在代码之上,一些关于一般数据格式的细节可能会很有用。这里有多种可能的解决方案,哪一种最好取决于数据。
  • @AlexanderCécile - 谢谢,第一个列表来自两个不同的数据点。我首先将它们以 dict 格式组合,但我需要按特定顺序对它们进行排序,其中人 A 总是需要成为第一个,依此类推。所以我转换为列表。关于语法错误,您看到了什么错误?我刚刚尝试了我共享的上述列表,一切正常。再次感谢您的帮助
  • 你能详细说明这两个来源是什么吗?每个人的计数和超链接对的数量是否相同?
  • 我遇到了一个错误,因为,请打鼓........我的变量名不小心包含了一个空格!

标签: python list append


【解决方案1】:

尝试使用字典理解和 iter 事先:

it = iter(list_2)
print({k:[(i, next(it)) for i in v] for k, v in list_1})

输出:

{'Person A': [((6, 'example.com/h'), '2'), ((1, 'example.com/xqz'), '6'), ((7, 'example.com/abc'), '2'), ((9, 'example.com/efg'), '23')], 'Person B': [((4, 'example.com/a'), '2'), ((5, 'example.com/rrr'), '6'), ((1, 'example.com/ddd'), '9'), ((4, 'example.com/nnn'), '25')], 'Person C': [((3, 'example.com/g'), '2'), ((1, 'example.com/qqq'), '5'), ((7, 'example.com/fff'), '7'), ((3, 'example.com/vvv'), '19')]}

【讨论】:

    【解决方案2】:

    您总是将list_2 传递给zip。因此,在每个循环中,它会将前 4 个元素带到zip。 需要从 list_2 中删除已压缩的元素以进行下一次迭代。 你可以尝试如下

    sample_dict = dict()
    
    for i in list_1:
          result = [c for c in zip(i[1], list_2)]
          sample_dict[i[0]] = result
          list_2 = list_2[len(i[1]):]
    sample_dict
    

    它为您提供以下输出。

    {'Person A': [((6, 'example.com/h'), '2'),
      ((1, 'example.com/xqz'), '6'),
      ((7, 'example.com/abc'), '2'),
      ((9, 'example.com/efg'), '23')],
     'Person B': [((4, 'example.com/a'), '2'),
      ((5, 'example.com/rrr'), '6'),
      ((1, 'example.com/ddd'), '9'),
      ((4, 'example.com/nnn'), '25')],
     'Person C': [((3, 'example.com/g'), '2'),
      ((1, 'example.com/qqq'), '5'),
      ((7, 'example.com/fff'), '7'),
      ((3, 'example.com/vvv'), '19')]}
    

    【讨论】:

      【解决方案3】:

      您可以像这样将list2 分成 4 组

      >>> updates = [list2[i:i+4] for i in range(0,len(list2),4)]
      >>> updates
      [['2', '6', '2', '23'], ['2', '6', '9', '25'], ['2', '5', '7', '19']]
      

      然后像这样创建dict

      >>> output = {}
      >>> for a,b in zip(list1, updates):        )])
      ...     output[a[0]] = [(x,y) for x,y in zip(a[1],b)]
      ...
      
      >>> output
      {'Person A': [((6, 'example.com/h'), '2'),
                    ((1, 'example.com/xqz'), '6'), 
                    ((7,'example.com/abc'), '2'),
                    ((9, 'example.com/efg'), '23')],
       'Person B': [((4, 'example.com/a'), '2'), 
                    ((5, 'example.com/rrr'), '6'),
                    ((1, 'example.com/ddd'), '9'),
                    ((4, 'example.com/nnn'), '25')],
       'Person C': [((3, 'example.com/g'), '2'),
                    ((1, 'example.com/qqq'), '5'), 
                    ((7, 'example.com/fff'), '7'),
                    ((3, 'example.com/vvv'), '19')]}
      

      【讨论】:

        猜你喜欢
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 2020-02-02
        • 2019-08-22
        • 2021-12-27
        相关资源
        最近更新 更多