- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个字典,想比较它们并列出差异:我考虑这样做,因为它们是字典,在检查了其他答案后这并不容易。另一种方法是用 pandas 将它们转换为数据框?我想也考虑顺序不同的相同列。因此应该通过名称进行检查。
例如,“KAEK”在第二个字典中列出的位置较低,如果它们的名称数据类型和长度相同,则不应仅仅因为两个字典中的顺序不同而将其视为不同。我该怎么做?
pst.schema
{'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'}
pst2.schema
{'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'}
我正在考虑将它们按如下顺序排列:
df = pd.DataFrame(pst2, columns=['NUM', 'DEC_ID','OBJECTID_1'])#place all the columns
#which doesn't work
但如果确实如此,两个词典之间不同列之间的任何间隙都会造成困惑。例如,如果第一个中的列是:
A,B,C
第二个:
A,B,B2,C
无法正确比较。因此应该按名称进行比较。
总结:比较这些并显示是否有任何组合与其他组合不同。要么是其他列中不存在的额外列,要么是这样的:
'ADDRESS', 'str:254' #from 1st dictionary
'ADDRESS', 'int:4' #from 2nd dictionary
尝试显示属于哪个字典:
pprint(set(('d1', el) if el in d1.items() else ('d2', el) for el in d2))
{('d2', 'ADDRESS'),
('d2', 'DEC_ID'),
('d2', 'DESC_'),
('d2', 'FID_PERIVL'),
('d2', 'KAEK'),
('d2', 'NUM'),
('d2', 'OBJECTID'),
('d2', 'OBJECTID_1'),
('d2', 'ORI_CODE'),
('d2', 'ORI_TYPE'),
('d2', 'PARCEL_COD'),
('d2', 'PROP_TYPE'),
('d2', 'Shape_Area'),
('d2', 'Shape_Le_1'),
('d2', 'Shape_Leng')}
正确的做法是显示两个词典的差异。
最佳答案
如果您只想找到两个 OrderedDict 之间的对称差异,
from collections import OrderedDict
>>> d1 = {'properties': OrderedDict([('KAEK', 'str:12'),
... ('PROP_TYPE', 'str:4'),
... ('ORI_TYPE', 'int:1')...
>>> d1 = d1['properties']
>>> d2 = {'properties': OrderedDict([('OBJECTID_1', 'int:9'),
... ('OBJECTID', 'int:9'),
... ('FID_PERIVL', 'int:9')...
>>> d2 = d2['properties']
<小时/>
>>> from pprint import pprint
>>> pprint(d1)
OrderedDict([('KAEK', 'str:12'),
('PROP_TYPE', 'str:4'),
('ORI_TYPE', 'int:1')...
>>> pprint(d2)
OrderedDict([('OBJECTID_1', 'int:9'),
('OBJECTID', 'int:9'),
('FID_PERIVL', 'int:9')...
<小时/>
pprint(set.symmetric_difference(set(d1.items()), set(d2.items())))
{('ADDRESS', 'int:4'),
('ADDRESS', 'str:254'),
('AREA', 'float:19.11'),
('DEC_ID', 'int:4'),
('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')}
然后按照您想要的方式使用结果?
请求进一步编辑OP,
>>> d3 = set.symmetric_difference(set(d1.items()), set(d2.items()))
>>> pprint(set(('d1', el) if el in d1.items() else ('d2', el) for el in d3))
{('d1', ('ADDRESS', 'str:254')),
('d1', ('AREA', 'float:19.11')),
('d1', ('DEC_ID', 'str:254')),
('d1', ('KAEK', 'str:12')),
('d1', ('LEN', 'float:19.11')),
('d1', ('NUM', 'str:9')),
('d1', ('ORI_CODE', 'str:100')),
('d1', ('ORI_TYPE', 'int:1')),
('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'))}
关于python - 比较字典并仅显示 Python 中的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018409/
我只想国家和资本化的值(value)。 这是我的完整代码: cities = { 'rotterdam': { 'country': 'netherlands',
想更好地了解如何比较对象类型的键。 dicOverall.exists(dic2) 返回 False,而 dicOverall.exists(dic1) 返回 True。我不太确定 .Exists 如
我是编程和 python 的新手,我不知道如何解决这个问题。 my_dict = {'tiger': ['claws', 'sharp teeth', 'four legs', 'stripes'
这个问题已经有答案了: Accessing an object property with a dynamically-computed name (19 个回答) 已关闭 8 年前。 我引用了这篇文
希望有人能帮忙。我正在使用 Python,我希望能够执行以下操作。 我有一组对象(例如形状)和一系列作用于这些对象的命令。命令的格式为命令字符串,后跟可变数量的参数,可以是字符串或整数 例如形状“矩形
我在文件中保存了一本字典。我从 python 交互式 shell 将字典加载到内存中,我的系统监视器显示 python 进程消耗了 4GB。以下命令提供以下输出: size1 = sys.getsiz
如果我运行以下代码: import json foo = [ { "name": "Bob", "occupation": "", "stand
我尝试获取列名及其索引,并将结果保存为数据框或字典: df <- data.frame(a=rnorm(10), b=rnorm(10), c=rnorm(10)) 我该怎么做?谢谢。 column
我正在尝试获取输入,如果字典 logins 有一个与我的输入匹配的键,我想返回该键的值。 logins = { 'admin':'admin', 'turtle':'password1
在 Perl 世界中有一个很棒的东西叫做 CPAN .它是开源 Perl 库的大型存储。 我使用来自 CPAN 的模块,我已经发布了 several distributions myself . 我使
这个问题已经有答案了: Is there a Python dict without values? (3 个回答) 已关闭 3 年前。 我有一个问题,我想跟踪大量值。如果我从未遇到过该值,我将执行操
想知道这是否可能。 我们有一个第 3 方库,其中包含有关用户的识别信息... 与库的主要交互是通过一个以字符串为键的 HashTable,并返回该键的信息对象图。 问题是, key 显然是区分大小写的
我是 .NET 编程的新手。对不起,如果这个问题以前被问过。 我目前正在学习 F#。 Dictionary、Hashtable 和 Map 之间有什么区别?我应该什么时候使用? 我还有一个标题中没有提
我正在尝试使用SVM进行3类分类。为此,我正在SVM培训期间准备词汇表。但是,由于我在SVM预测期间获得随机结果,因此我怀疑我的词汇创建方法中存在一些问题。我创建词汇的代码如下: //Mat trai
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
假设我有一个以下形式的嵌套字典: {'geo': {'bgcolor': 'white','lakecolor': 'white','caxis': {'gridcolor': 'white', 'l
我有一个 java 应用程序,每秒启动和停止数亿个项目(从外部脚本调用)多次。 Input: String key Output: int value 此应用程序的目的是在从未永远改变的Map(约30
我正在尝试找出字典与集合和数组相比的相对优势和功能。 我发现了一篇很棒的文章here但找不到一个简单的表格来比较所有不同的功能。 有人知道吗? 最佳答案 请参阅下表,对集合和字典进行有用的比较。 (该
我想要一个字典,它可以为字典中没有的任何键返回一个指定的值,例如: var dict = new DictWithDefValues("not specified"); dict.Add("bob78
我是 python 新手,目前仍在学习如何处理列表和字典。 我有这两个功能 def food_database(item_name, size_serv, calorie_serv, prot
我是一名优秀的程序员,十分优秀!