Python 显示每行来自哪个词典? 这两个字典都有菲奥娜图书馆的SeabFeFILE模式,它们最终打印出了它们的差异,我还需要提供哪一行属于哪一个字典: from collections import OrderedDict from pprint import pprint >>> d1 = {'properties': OrderedDict([('KAEK', 'str:12'), ... ('PROP_TYPE', 'str:4'), ... ('ORI_TYPE', 'int:1'), ... ('ORI_CODE', 'str:100'), ... ('DEC_ID', 'str:254'), ... ('ADDRESS', 'str:254'), ... ('NUM', 'str:9'), ... ('LEN', 'float:19.11'), ... ('AREA', 'float:19.11')]), ... 'geometry': 'Polygon'} >>> d1 = d1['properties'] >>> d2 = {'properties': OrderedDict([('OBJECTID_1', 'int:9'), ... ('OBJECTID', 'int:9'), ... ('FID_PERIVL', 'int:9'), ... ('DESC_', 'str:254'), ... ('PROP_TYPE', 'str:4'), ... ('Shape_Leng', 'float:19.11'), ... ('Shape_Le_1', 'float:19.11'), ... ('Shape_Area', 'float:19.11'), ... ('PARCEL_COD', 'str:254'), ... ('KAEK', 'str:50'), ... ('NUM', 'int:4'), ... ('DEC_ID', 'int:4'), ... ('ADDRESS', 'int:4'), ... ('ORI_CODE', 'int:4'), ... ('ORI_TYPE', 'int:4')]), ... 'geometry': 'Polygon'} >>> d2 = d2['properties']
我想让结果显示,在这最后一部分中,哪本词典是从哪本词典中产生的,在哪本词典中列出了对称的差异:请参阅注释,看看我打算做什么Python 显示每行来自哪个词典? 这两个字典都有菲奥娜图书馆的SeabFeFILE模式,它们最终打印出了它们的差异,我还需要提供哪一行属于哪一个字典: from collections import OrderedDict from pprint import pprint >>> d1 = {'properties': OrderedDict([('KAEK', 'str:12'), ... ('PROP_TYPE', 'str:4'), ... ('ORI_TYPE', 'int:1'), ... ('ORI_CODE', 'str:100'), ... ('DEC_ID', 'str:254'), ... ('ADDRESS', 'str:254'), ... ('NUM', 'str:9'), ... ('LEN', 'float:19.11'), ... ('AREA', 'float:19.11')]), ... 'geometry': 'Polygon'} >>> d1 = d1['properties'] >>> d2 = {'properties': OrderedDict([('OBJECTID_1', 'int:9'), ... ('OBJECTID', 'int:9'), ... ('FID_PERIVL', 'int:9'), ... ('DESC_', 'str:254'), ... ('PROP_TYPE', 'str:4'), ... ('Shape_Leng', 'float:19.11'), ... ('Shape_Le_1', 'float:19.11'), ... ('Shape_Area', 'float:19.11'), ... ('PARCEL_COD', 'str:254'), ... ('KAEK', 'str:50'), ... ('NUM', 'int:4'), ... ('DEC_ID', 'int:4'), ... ('ADDRESS', 'int:4'), ... ('ORI_CODE', 'int:4'), ... ('ORI_TYPE', 'int:4')]), ... 'geometry': 'Polygon'} >>> d2 = d2['properties'],python,dictionary,Python,Dictionary,我想让结果显示,在这最后一部分中,哪本词典是从哪本词典中产生的,在哪本词典中列出了对称的差异:请参阅注释,看看我打算做什么 pprint(set.symmetric_difference(set(d1.items()), set(d2.items()))) {('ADDRESS', 'int:4'),#somehow inform that this belongs to d2 and so on... ('ADDRESS', 'str:254'),#d1 ('AREA', 'float:1
pprint(set.symmetric_difference(set(d1.items()), set(d2.items())))
{('ADDRESS', 'int:4'),#somehow inform that this belongs to d2 and so on...
('ADDRESS', 'str:254'),#d1
('AREA', 'float:19.11'),#d1
('DEC_ID', 'int:4'),#d2
('DEC_ID', 'str:254'),
('DESC_', 'str:254'),
('FID_PERIVL', 'int:9'),
('KAEK', 'str:12'),
('KAEK', 'str:50'),
('LEN', 'float:19.11'),
('NUM', 'int:4'),
('NUM', 'str:9'),
('OBJECTID', 'int:9'),
('OBJECTID_1', 'int:9'),
('ORI_CODE', 'int:4'),
('ORI_CODE', 'str:100'),
('ORI_TYPE', 'int:1'),
('ORI_TYPE', 'int:4'),
('PARCEL_COD', 'str:254'),
('Shape_Area', 'float:19.11'),
('Shape_Le_1', 'float:19.11'),
('Shape_Leng', 'float:19.11')}
简单地说,按字典的名称对它们进行分类。我怎样才能做到呢
我试过这个:
pprint(设置('d1',el)如果d1.items()中的el,则设置('d1',el)如果d2.items()中的el设置('d2',el))
但未正确返回:
{('d1', ('PROP_TYPE', 'str:4')),
('d2', ('ADDRESS', 'int:4')),
('d2', ('DEC_ID', 'int:4')),
('d2', ('DESC_', 'str:254')),
('d2', ('FID_PERIVL', 'int:9')),
('d2', ('KAEK', 'str:50')),
('d2', ('NUM', 'int:4')),
('d2', ('OBJECTID', 'int:9')),
('d2', ('OBJECTID_1', 'int:9')),
('d2', ('ORI_CODE', 'int:4')),
('d2', ('ORI_TYPE', 'int:4')),
('d2', ('PARCEL_COD', 'str:254')),
('d2', ('Shape_Area', 'float:19.11')),
('d2', ('Shape_Le_1', 'float:19.11')),
('d2', ('Shape_Leng', 'float:19.11'))}
正确的方法是像之前的最后一个一样显示它,但也有d1和d2信息。按此顺序:
pprint(set.symmetric_difference(set(d1.items()), set(d2.items())))
{('ADDRESS', 'int:4'),#somehow inform that this belongs to d2 and so on...
('ADDRESS', 'str:254'),#d1
('AREA', 'float:19.11'),#d1
('DEC_ID', 'int:4'),#d2
('DEC_ID', 'str:254'),
('DESC_', 'str:254'),
('FID_PERIVL', 'int:9'),
('KAEK', 'str:12'),
('KAEK', 'str:50'),
('LEN', 'float:19.11'),
('NUM', 'int:4'),
('NUM', 'str:9'),
('OBJECTID', 'int:9'),
('OBJECTID_1', 'int:9'),
('ORI_CODE', 'int:4'),
('ORI_CODE', 'str:100'),
('ORI_TYPE', 'int:1'),
('ORI_TYPE', 'int:4'),
('PARCEL_COD', 'str:254'),
('Shape_Area', 'float:19.11'),
('Shape_Le_1', 'float:19.11'),
('Shape_Leng', 'float:19.11')}
您可以这样做:
d1_items = set(d1.items())
d2_items = set(d2.items())
result = sorted([(k, 'd1', v) for k, v in d1_items if (k, v) not in d2_items] +
[(k, 'd2', v) for k, v in d2_items if (k, v) not in d1_items])
result = [(k, v, d) for k, d, v in result]
pprint(result)
输出:
[('ADDRESS', 'str:254', 'd1'),
('ADDRESS', 'int:4', 'd2'),
('AREA', 'float:19.11', 'd1'),
('DEC_ID', 'str:254', 'd1'),
('DEC_ID', 'int:4', 'd2'),
('DESC_', 'str:254', 'd2'),
('FID_PERIVL', 'int:9', 'd2'),
('KAEK', 'str:12', 'd1'),
('KAEK', 'str:50', 'd2'),
('LEN', 'float:19.11', 'd1'),
('NUM', 'str:9', 'd1'),
('NUM', 'int:4', 'd2'),
('OBJECTID', 'int:9', 'd2'),
('OBJECTID_1', 'int:9', 'd2'),
('ORI_CODE', 'str:100', 'd1'),
('ORI_CODE', 'int:4', 'd2'),
('ORI_TYPE', 'int:1', 'd1'),
('ORI_TYPE', 'int:4', 'd2'),
('PARCEL_COD', 'str:254', 'd2'),
('Shape_Area', 'float:19.11', 'd2'),
('Shape_Le_1', 'float:19.11', 'd2'),
('Shape_Leng', 'float:19.11', 'd2')]
您可以这样做:
d1_items = set(d1.items())
d2_items = set(d2.items())
result = sorted([(k, 'd1', v) for k, v in d1_items if (k, v) not in d2_items] +
[(k, 'd2', v) for k, v in d2_items if (k, v) not in d1_items])
result = [(k, v, d) for k, d, v in result]
pprint(result)
输出:
[('ADDRESS', 'str:254', 'd1'),
('ADDRESS', 'int:4', 'd2'),
('AREA', 'float:19.11', 'd1'),
('DEC_ID', 'str:254', 'd1'),
('DEC_ID', 'int:4', 'd2'),
('DESC_', 'str:254', 'd2'),
('FID_PERIVL', 'int:9', 'd2'),
('KAEK', 'str:12', 'd1'),
('KAEK', 'str:50', 'd2'),
('LEN', 'float:19.11', 'd1'),
('NUM', 'str:9', 'd1'),
('NUM', 'int:4', 'd2'),
('OBJECTID', 'int:9', 'd2'),
('OBJECTID_1', 'int:9', 'd2'),
('ORI_CODE', 'str:100', 'd1'),
('ORI_CODE', 'int:4', 'd2'),
('ORI_TYPE', 'int:1', 'd1'),
('ORI_TYPE', 'int:4', 'd2'),
('PARCEL_COD', 'str:254', 'd2'),
('Shape_Area', 'float:19.11', 'd2'),
('Shape_Le_1', 'float:19.11', 'd2'),
('Shape_Leng', 'float:19.11', 'd2')]
这很好,但是你能让它按照我发布的最后一个结果的顺序出现吗?比如
d1
和相应的不同d2
,然后所有额外的d2
单独出现在最后。你的意思是{(('ADDRESS','str:254'),'d1')),…
,等等?元素的顺序在集合中是任意的,但是如果您希望先包含d1
中的元素,然后包含d2
中的元素,则可以使用列表。不,这不是我的意思。那将是荒谬的。我的意思是,两个词典中存在的列为了可读性而同时显示:address ofd1
然后地址d2
不是所有的d1
然后是所有的d2
。可能需要转换为数据帧?现在它只缺少d1
和d2
按顺序的符号,你已经设置好了。你能做到吗?@user122244我猜,你的意思是这样的?(实际上,您可以跳过前面的代码>代码> pPrime/Cord>如果您不介意在中间有<代码> d1>代码> /<代码> d2>代码…这很好,但是您能按照我上次发布的结果的顺序出现吗?比如<代码> d1 < /代码>,对应的不同的代码< d2>代码>最后,所有额外的<代码> d2<代码> >您的意思是LIK。e{(('ADDRESS','str:254'),'d1')),…
,等等?元素的顺序在集合中是任意的,但是如果您希望先包含d1
中的元素,然后包含d2
中的元素,则可以使用列表。不,这不是我的意思。那将是荒谬的。我的意思是,两个词典中存在的列为了可读性而同时显示:address ofd1
然后地址d2
不是所有的d1
然后是所有的d2
。可能需要转换为数据帧?现在它只缺少d1
和d2
按顺序的符号,你已经设置好了。你能做到吗?@user122244我猜,你的意思是这样的?(实际上,您可以跳过前面的代码>代码> pPrime/Cord>。如果您不介意在中间有<代码> d1>代码> /<代码> d2<代码>…