【问题标题】:Why is "HELLO" mapped to "CITY" and not "WORLD"?为什么“HELLO”映射到“CITY”而不是“WORLD”?
【发布时间】:2020-09-28 08:55:15
【问题描述】:
dct = {k: v for k in ["HELLO", "SLEEPING"] for v in ["WORLD", "CITY"]}

print(dct["HELLO"])

【问题讨论】:

  • 你真的检查了dct 本身的值吗?为什么你会认为"World"any 键的值呢?
  • 这能回答你的问题吗? How to iterate through two lists in parallel?
  • 如果您创建一个列表而不是字典:[(k,v) for k in ["HELLO", "SLEEPING"] for v in ["WORLD", "CITY"]],您将自己看到所有答案提到的嵌套循环:[('HELLO', 'WORLD'), ('HELLO', 'CITY'), ('SLEEPING', 'WORLD'), ('SLEEPING', 'CITY')]。更容易理解为什么 SLEEPING 在 dict 案例中被“覆盖”。

标签: python loops list-comprehension


【解决方案1】:

您正在覆盖这些值。首先,您将“HELLO”和“SLEEPING”两个键都设置为“WORLD”,然后再次将它们(!)设置为“CITY”。见:https://stackoverflow.com/a/17006736/12693728

【讨论】:

    【解决方案2】:

    这就是理解的样子。

    In [1]: {k: v for k in ["HELLO", "SLEEPING"] for v in ["WORLD", "CITY"]}                                                                             
    Out[1]: {'HELLO': 'CITY', 'SLEEPING': 'CITY'}
    
    In [2]: d = {}                                                                                                                                       
    
    In [3]: for k in ["hello", "sleeping"]: 
       ...:     for v in ["world", "city"]: 
       ...:         d[k]=v 
       ...:                                                                                                                                              
    
    In [4]: d                                                                                                                                            
    Out[4]: {'hello': 'city', 'sleeping': 'city'}
    

    你要做的是压缩两个列表

    In [8]: {k: v for k,v in zip( ["HELLO", "SLEEPING"],["WORLD", "CITY"])}                                                                              
    Out[8]: {'HELLO': 'WORLD', 'SLEEPING': 'CITY'}
    

    【讨论】:

      【解决方案3】:

      您正在遍历这两个列表,因此您将首先映射到您想要的内容,然后覆盖它。

      您应该看到两个键映射到同一个字符串,因为它是第二个列表中的最后一个字符串。

      你可以使用 zip 实现你想要的,这里有例子: Convert two lists into a dictionary

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-12
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多