【问题标题】:Merge two dictionaries conditionally using dict comprehension使用字典理解有条件地合并两个字典
【发布时间】:2019-11-21 14:13:13
【问题描述】:

我想根据 d1 的值和 d2 的键的子字符串来连接两个字典。结果字典的键为 d1,对应的值为 d2。

d1 = {'web02': '23', 'web01': '50'}
d2 = {'server/dc-50': 's01.local', 'server/dc-23': 's02.local'}

将导致 = {web01:s01.local, web02:s02.local}

【问题讨论】:

  • 我不太确定你的目标是什么。这两个字典有什么关系?您写了“d2 的键的子字符串”,但 d2 的键似乎不相关。您指的是 “value” 吗?是什么让您认为您需要使用 dict 理解?
  • @ArkistarvhKltzuonstev 他们是,更正了
  • {k: d2['server/dc-{}'.format(v)] for k, v in d1.items()}?
  • @Iguananaut d2的key包含在d1的value中
  • "d2 的键包含在 d1 的值中" 在我看来,这与我相反。但基于什么关系?它们都包含子字符串'01'吗?您根据什么标准将一个字典中的键与另一个字典的值相关联?只是他们有 any 共同的非空子字符串,还是什么?这可能有助于更多地解释您需要做什么以及为什么。

标签: python python-2.7 dictionary dictionary-comprehension


【解决方案1】:

我想这就是你需要的:

result = {k1:v2 for k1,v1 in d1.items() for k2,v2 in d2.items() if v1 in k2}

输出

{'web02': 's02.local', 'web01': 's01.local'}

【讨论】:

    【解决方案2】:

    这是在没有嵌套循环的情况下通过使用字符串格式获取值来完成的:

    data = {k: d2['server/dc-' + v] for k, v in d1.items()}
    

    打印:

    {'web02': 's02.local', 'web01': 's01.local'}
    

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2015-09-26
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2021-03-13
      相关资源
      最近更新 更多