【问题标题】:Create new dictionary based on keys from other dictionaries根据其他字典中的键创建新字典
【发布时间】:2019-02-23 18:29:35
【问题描述】:

我有 2 部字典(简体)如下所示:

dict1 = {'X(0,0)': 1, 'X(0,1)': 3, 'X(1,0)':4, 'X(1,1)':2}
dict2 = {'X(0)': 'area1', 'X(1)': 'area2'}

如果dict2'X(i)'dict1'X(i,j)' 的一部分,我想用第一个键的键和第二个键的值创建第三个字典。 所以最终的结果应该是这样的:

dict3 = {'X(0,0)': 'area1', 'X(0,1)': 'area1', 'X(1,0)':'area2', 'X(1,1)':'area2'}

我已尝试按照here 的建议进行操作,但这并不是我想要的,无法实现。

【问题讨论】:

  • 我不明白这个逻辑...我的意思是X(1,0) 包含01,你为什么将它与area2 联系起来而不是area1?另外:为什么要使用字符串?如果您只是将元组用作字符串,那会容易得多......即,而不是"X(0)""X(0,0)" 使用0(0,0) 之后你可以简单地做key1 in key2 而不必解析两者......
  • @GiacomoAlzetta 请注意“X(i)”和“X(i,j)”。所以我们只需要查看 (i,j) 对中的第一个数字。
  • 不是很笼统,但我认为这适用于您的情况:{k: dict2[k[:3]+")"] for k, v in dict1.items()}
  • 这些键中的数字只会是个位数吗?
  • @PM2Ring 是的,我只关心 (i,j) 对中的第一个数字是否常见。它们是优化的结果,所以我更喜欢保持它们这样,这样更容易跟踪正在发生的事情。键中的数字不是个位数,但无论如何我都不希望它们出现在最终字典中。

标签: python python-3.x dictionary


【解决方案1】:

你可以这样做: 但该方法更适合您的问题。

print {key:dict2.get(key.split(',')[0]+')')for key in dict1}
# {'X(0,0)': 'area1', 'X(0,1)': 'area1', 'X(1,0)': 'area2', 'X(1,1)': 'area2'}

X(0,0) 转换为X(0) 这样做,

In [29]: 'X(0,0)'.split(',')
Out[29]: ['X(0', '0)']

In [30]: 'X(0,0)'.split(',')[0]+')'
Out[30]: 'X(0)'

【讨论】:

  • 谢谢@RahulKP。这正是我想要的!
【解决方案2】:

我建议您先创建一个临时字典(用于查找键),然后再制作最后一个:

tmp_dict = {key[:3]: value for key, value in dict2.items()}
# {'X(0': 'area1', 'X(1': 'area2'}
dict3 = {key: tmp_dict[key[:3]] for key, value in dict1.items()}
# {'X(0,0)': 'area1', 'X(0,1)': 'area1', 'X(1,0)': 'area2', 'X(1,1)': 'area2'}

这仅适用于一位数坐标。

【讨论】:

    【解决方案3】:
    dict3 ={}
    for i in dict1:
        dict3[i]=dict2[i[:3]+")"]
    

    适合你的情况!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      相关资源
      最近更新 更多