【问题标题】:How to connect two list together in python如何在python中将两个列表连接在一起
【发布时间】:2020-09-11 13:21:38
【问题描述】:

我有这两个列表:

names = ["John", "Barack", "Elon"]
numbers = ["0342", "03478878", "0345"]

他们是我的客户,我想要的是项目“约翰”应该与它的编号链接,即列表中的第 0 位项目,以此类推,我也想将其他名称与那里链接分别是数字,所以当我稍后将它们导出到 sqlite 数据库时,数字“0342”应该在 John 之下,以此类推,其余的名称。

【问题讨论】:

  • 您能否通过链接来解释您的意思。你的意思是连接,因为你可以这样做,names[0]+numbers[0]
  • 不,我不想连接它们
  • 我想把它们联系起来,这样即使我有我的客户的新号码,我也可以轻松地将它们添加到下面的名称中

标签: python python-3.x list sqlite


【解决方案1】:

最好用字典来做。

dct = {name: number for name, number in zip(names, numbers)}

正如@Onyambu 所指出的,这也适用于

dct = dict(zip(names,numbers))

从右到左读取这个列表表达式: zip() 将列表中的每个第 i 个元素相互配对。 每对分别分配给namenumber 然后将它们作为key: value 对收集到字典中{} 然后分配给dct

您可以通过以下方式获取每个名称的编号:

dct["John"] ## "0342"
for name in names:
    print(dct[name])

如果“约翰”有更多条目

如果有更多条目,上面的代码将覆盖以前的 John 值。 那样的话

def to_dict(l1, l2):
    dct = {}
    for key, val in zip(l1, l2):
        dct[key] = dct.get(key, []) + [vak]
    return dict

这可确保每个名称的所有值都收集在列表中。 dct.get(key, []) 是一个不错的技巧,因为如果查看 key 是否是 dct 中的键,如果不是,则返回 [] - 所以这保证了列表融合 + [number] 的组合,最后你有保证列表中有一个或多个数字。

names = ["a", "b", "c", "a", "b", "d"]
numbers = [1, 4, 2, 4, 5, 5]

name2numbers = to_dict(names, numbers)

name2numbers["a"] ## [1, 4]
name2numbers["d"] ## [5]

要从值到名称搜索,只需翻转函数中的列表

number2names = to_dict(numbers, names)


number2names[4] ## ["b", "a"]
number2names[2] ## ["c"]

【讨论】:

  • 用你的方法,即使我给John加更多的数字也不成问题,对吧?
  • @SahibzadaMuhammad hm ...更多的数字需要分配给 hte key John 一个数字列表。
  • 而且,我认为您的代码存在问题,zip 适用于元组,但我有一个列表,我想要一个带有列表的解决方案
  • @SahibzadaMuhammad 您的列表越长,使用字典解决方案的速度就越快。
  • for 循环的目的是什么? dict(zip(names,numbers))
【解决方案2】:

您可以使用字典来做到这一点:

linked = {}
names = ["John", "Barack", "Elon"]
numbers = ["0342", "03478878", "0345"]

for x, name in enumerate(names):
    linked[name] = numbers[x]

print(linked)

应该有效

【讨论】:

    【解决方案3】:

    要使用元组链接它们,请使用:

    >>> list(zip(names, numbers))
    [('John', '0342'), ('Barack', '03478878'), ('Elon', '0345')]
    

    使用字典:

    >>> dict(zip(names, numbers))
    {'John': '0342', 'Barack': '03478878', 'Elon': '0345'}
    

    【讨论】:

    • 循环的目的是什么? dict(zip(names,numbers))
    • @Onyambu 不知道你能做到这一点,谢谢!我非常习惯使用 dict 理解,更新了我的答案
    【解决方案4】:

    使用记录数组,将每个客户端及其信息存储为一个类,然后将这些类的实例存储在一个数组中

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多