【问题标题】:Construction of a dictionary from two lists [duplicate]从两个列表构建字典[重复]
【发布时间】:2015-12-03 19:24:38
【问题描述】:

我有两个如下所示的列表(长度相等)

cities = ['New York','Tokyo','Moscow','London']
altitudes = ['13000','12000','11000','9000']

我想构造一个字典如下

mydict = {x : y for x in cities and y in altitudes}

我的 python 解释器说语法无效。为什么这是无效的?我该怎么做?

【问题讨论】:

    标签: python list python-3.x dictionary


    【解决方案1】:
    mydict = dict(zip(cities, altitudes))
    

    【讨论】:

      【解决方案2】:
      thing = {city:altitude for city, altitude in zip(cities, altitudes)}
      

      理解期望单个迭代(列表等)循环。因此,要解决这个问题,您首先需要将两个列表转换为一个列表,然后将该列表输入到将其转换为 dict 的理解中。

      把上面那行拉开一点,你先用python的zip来聚合元素

      list_of_tuples = zip(cities, altitudes)
      

      然后你把它转换成一个字典:

      thing = {city: alt for city, alt in list_of_tuples}
      

      或者更简单

      thing = dict(list_of_tuples)
      

      【讨论】:

      • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
      【解决方案3】:

      你真正想要的是

      mydict = dict(zip(cities, altitudes))
      

      执行嵌套循环会给您错误的结果,因为它会迭代两个列表的笛卡尔积,如下所示:

      >>> [ (c,a) for c in cities for a in altitudes ]
      [('New York', '13000'), ('New York', '12000'), ('New York', '11000'), ('New York', '9000'), ('Tokyo', '13000'), ('Tokyo', '12000'), ('Tokyo', '11000'), ('Tokyo', '9000'), ('Moscow', '13000'), ('Moscow', '12000'), ('Moscow', '11000'), ('Moscow', '9000'), ('London', '13000'), ('London', '12000'), ('London', '11000'), ('London', '9000')]
      

      【讨论】:

        【解决方案4】:
        cities = ['New York','Tokyo','Moscow','London']
        altitudes = ['13000','12000','11000','9000']
        print dict(i for i in zip(cities,altitudes))
        

        你可以简单地用这个来做。

        【讨论】:

        • i for i in 过度
        • @EliKorvigo 是的,后来才意识到......现在为时已晚:P
        猜你喜欢
        • 2017-04-27
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 2021-06-25
        相关资源
        最近更新 更多