Python 基于其他字典中的键创建新字典

Python 基于其他字典中的键创建新字典,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有两本字典(简化)如下所示: dict1 = {'X(0,0)': 1, 'X(0,1)': 3, 'X(1,0)':4, 'X(1,1)':2} dict2 = {'X(0)': 'area1', 'X(1)': 'area2'} dict3 = {'X(0,0)': 'area1', 'X(0,1)': 'area1', 'X(1,0)':'area2', 'X(1,1)':'area2'} 如果dict2键'X(I)是dict1键'X(I,j)的一部分,我想创建第三个字典,其中包含第

我有两本字典(简化)如下所示:

dict1 = {'X(0,0)': 1, 'X(0,1)': 3, 'X(1,0)':4, 'X(1,1)':2}
dict2 = {'X(0)': 'area1', 'X(1)': 'area2'}
dict3 = {'X(0,0)': 'area1', 'X(0,1)': 'area1', 'X(1,0)':'area2', 'X(1,1)':'area2'}
如果
dict2
'X(I)
dict1
'X(I,j)
的一部分,我想创建第三个字典,其中包含第一个字典的键和第二个字典的值。 所以最终结果应该是这样的:

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

我尝试了以下建议,但这并不完全是我想要的,也无法实现。

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

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)'

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

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)'

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

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'}

这只适用于单个数字坐标。

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

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'}
dict3 ={}
for i in dict1:
    dict3[i]=dict2[i[:3]+")"]
这仅适用于单位数坐标

dict3 ={}
for i in dict1:
    dict3[i]=dict2[i[:3]+")"]
为了你的案子


为了你的案子

我不明白这个逻辑。。。我的意思是
X(1,0)
同时包含
0
1
,为什么您将其与
area2
关联,而不是与
area1
关联?还有:为什么要使用字符串?如果您只是简单地使用元组作为字符串,它将更容易。。。i、 e.用
0
“X(0,0)”代替
“X(0,0)”
使用
0
(0,0)
之后,您只需在键2中执行
key1
,而不必同时解析…@GiacomoAlzetta注意“X(i)”和“X(i,j)”。所以我们只需要看看(i,j)对中的第一个数字。不是很一般,但我认为这适用于你的情况:
{k:dict2[k[:3]+>”]对于dict1.items()中的k,v
这些键中的数字会不会只有一位数?@PM2Ring是的,我只关心(i,j)对中的第一个数字是否常见。它们是优化的结果,所以我更喜欢这样保存它们,以便更容易跟踪正在发生的事情。键中的数字不是个位数,但我不希望它们出现在最终的字典中。我不理解这个逻辑。。。我的意思是
X(1,0)
同时包含
0
1
,为什么您将其与
area2
关联,而不是与
area1
关联?还有:为什么要使用字符串?如果您只是简单地使用元组作为字符串,它将更容易。。。i、 e.用
0
“X(0,0)”代替
“X(0,0)”
使用
0
(0,0)
之后,您只需在键2中执行
key1
,而不必同时解析…@GiacomoAlzetta注意“X(i)”和“X(i,j)”。所以我们只需要看看(i,j)对中的第一个数字。不是很一般,但我认为这适用于你的情况:
{k:dict2[k[:3]+>”]对于dict1.items()中的k,v
这些键中的数字会不会只有一位数?@PM2Ring是的,我只关心(i,j)对中的第一个数字是否常见。它们是优化的结果,所以我更喜欢这样保存它们,以便更容易跟踪正在发生的事情。键中的数字不是个位数,但我不希望它们出现在最终的字典中。谢谢@RahulKP。这正是我想要的!谢谢你@RahulKP。这正是我想要的!