使用python dicts进行智能操作的工具

ker-dict-tools的Python项目详细描述


Ker_dict_工具

操作python命令的智能工具。

  • dict_diff():比较两个报告差异的dict的函数。
  • 按路径获取值(get_value_by_path():从通过指向它们的路径的dict中获取单个或多个值。
  • 按路径设置值::在通过指向它的路径的嵌套dict中设置值。

"路径"概念:

我需要一种聪明的方法来访问dict,dict的结构可能会发生不可预测的变化(例如嵌套的dict列表),从而使它们与其他对象建立关系。 因此,我开发了"get_value_by_path()"和"set_value_by_path()"函数,使我能够安全快速地访问这些值。 路径是一个值列表,每个值都指向dict的子序列级别。 例如,给定dict:

dct = {
    "foo": [
        {"bar":1},
        {"baz":2}
    ]
}

访问值2的路径是:

[
    "foo",      # Key for outer level of the dict
    1,          # Index for list contained in the "foo" value
    "baz"       # Key for dict at index 1 of the list
]

由于设计用于实际dict可能部分未知的上下文中,定义要使用的路径的入口点是get_value_by_path()函数,wich接受一个更"弹性"的列表(允许对dict进行简单的查询)。

按路径获取u值(dctpathfail=falsedebug=false

允许检索存储在dctdict中某个位置的值(或多个值),前提是给定的路径正确(对应于dict的结构)。 dct参数可以是dict或dict列表。 如果传递fail参数(true),当路径中的元素与应用的dctdict所在的层不对应时,将引发typeerror异常。否则,函数将返回一个空namedtuple,其中0作为的值。found属性。 如果传递了debug参数(true),则函数将以debug级别记录(使用logging模块)。

当传递到按路径获取值时,路径列表中的接受值 <表><广告>dict层类型 接受值 < /广告><正文>听写列表int(列表索引)dictkey:value要在列表中的一个或多个dict中匹配的对)列表(dict)(包含一个键:value对的dict列表,所有这些都将在列表中的一个或多个dict中匹配)str(在列表中包含的dict键中找到键)字符串"*"(通配符返回列表中的所有元素)dictstr(dict键)字符串"*"(返回dict中所有项的通配符)

例如:

dct = [
{ "foo": [{"bar":1, "baz":2},{"bar":3, "baz":4}] },
{ "foo": [{"bar":5, "baz":6},{"bar":7, "baz":8}] },
]
path1 = [0, "foo", {"bar":1}, "baz"] 
path2 = [0, "foo", 0, "baz"]

路径1和路径2将导致值2。 用:

path3 = [0, "foo", "*", "baz"]

路径3将导致值24

返回的对象

函数将返回一个dict_search对象。

res = get_value_by_path(myDict, myPath)

res => 'dict_search'(
    found=n, # -> number of matches
    results=[
        dict_branch(
            path={list1} # Path leading to the value #1
            value={value1} # Value #1
            ),
        dict_branch(
            path={list2} # Path leading to the value #2
            value={any} # Value #2
            ),
        ...
            
    ]
    )

函数将返回一个'dict_search'namedtuple,包含两个属性:

  • 。找到{int}:dict中与给定路径匹配的元素数
  • .results{list}:名为duples的dict分支的列表,每一个都指定了与给定路径匹配的元素的路径和值。

dict_branch命名双结构:
  • .path{list}:"normalized"指向值的路径(仅包含dict键或列表索引)
  • 。值{any}:在指定的路径中找到的值

使用get_value_by_path()查询dict

也可以验证给定的值是否存在于dict的某一层,该层将指向它的路径作为路径传递,并指定要在路径列表中查找的值作为最后一项。 函数返回一个namedtuple,它在索引0(。found)处指定给定路径的匹配数。

按路径设置u值(dctpathvaluedebug=false

允许在用给定路径指定的dctdictdict的特定位置设置给定的值。 根据dict的结构,path参数必须是intsstrings的列表(例如,在dict search对象fromget戋value戋by戋path()中返回的字符串)。

diff指令(dct1dct2fail=falsestartpath=none

dct1dct2指令执行比较。 这两个参数必须属于同一类型(bot-lists of dict或simple dict)。 返回一个'diff_results'对象,包含四个属性:

  • 。比较{bool}:如果比较没有问题,则为true。
  • 。已更新{list}:已更新项的列表'namedtuple(见下文)包含有关两个dict中存在但具有不同值的元素的信息。
  • 。添加了{list}:指向dct2中找到但不在dct1中找到的元素的路径列表。
  • 。已删除{list}:指向dct1中找到但不在dct2中找到的元素的路径列表。

updated_itemnamedtuple填充列表。updated具有以下结构:

  • .path{list}:指向更新元素的路径。
  • 。旧值{any}:元素的旧值。
  • 。旧类型{type}:元素值的旧类型。
  • 。新值{any}:元素的新值。
  • 。new_type{type}:元素值的新类型。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于执行intellij插件的java自定义操作按钮   regexjava模式。带重叠分隔符的split()   java如何在使用ExpectedConditions时避免StaleElementReferenceException。属性是什么?   java在Hibernate中获得唯一的结果   位置更改时不更新java XML数据   java Web服务对另一Web服务的依赖关系   向数据库发布数据时出现java错误204   java如何永久删除listview项?   使用pdfbox为同一PDF创建java多个外部签名   java如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的映像)?   java对活动生命周期的长期引用   java将一个int和string数组合并到第三个数组中   java停止线程和在哪里使用锁   java ADK与JDK与SDK的区别?   对于上面提到的程序,我得到一个测试用例的运行时错误。所有剩余的测试用例都通过了。有什么建议吗   java Spring启动项目创建bean时出错   java读取同一文件行上的字符串和整数