相关疑难解决方法(0)

为单词python创建嵌套字典

我有一个单词列表,我想将它们存储在嵌套字典中.

以下是样本清单: -

words = ['Apple','Ape','Bark','Barn']
Run Code Online (Sandbox Code Playgroud)

我要创建的字典如下: -

{'A':{'P':{'E':{},
           'P':{'L':{'E':{}}}}},
 'B':{'A':{'R':{'K':{},'N':{}}}}}
Run Code Online (Sandbox Code Playgroud)

这些词不区分大小写.

python data-structures python-3.x

5
推荐指数
1
解决办法
1148
查看次数

以编程方式更新YAML文件

我有一个Python dict,它来自于通常读取YAML文件

yaml.load(stream)
Run Code Online (Sandbox Code Playgroud)

我想以编程方式更新YAML文件给定要更新的路径,如:

1组,选项1,option11,值

并将生成的dict再次保存为yaml文件.考虑到路径是动态的(假设用户能够通过我使用Cmd创建的简单CLI进入路径),我面临更新二项决定的问题.

有任何想法吗?

谢谢!

更新 让我在这个问题上更加具体:问题是更新字典的一部分,我事先并不知道结构.我正在开发一个项目,其中所有配置都存储在YAML文件中,我想添加一个CLI以避免必须手动编辑它们.这是一个示例YAML文件,使用PyYaml加载到字典(config-dict):

config:
 a-function: enable
 b-function: disable
 firewall:
  NET:
   A:
    uplink: enable
    downlink: enable
   B:
    uplink: enable
    downlink: enable
  subscriber-filter:
   cancellation-timer: 180
 service:
  copy:
   DS: enable
  remark:
   header-remark:
    DSC: enable
    remark-table:
 port:
  linkup-debounce: 300
  p0:
   mode: amode
  p1:
   mode: bmode
  p2:
   mode: amode
  p3:
   mode: bmode
Run Code Online (Sandbox Code Playgroud)

我用Cmd创建了CLI,即使使用自动完成它也能很好地工作.用户可以提供如下行:

config port p1 mode amode
Run Code Online (Sandbox Code Playgroud)

所以,我需要编辑:

config-dict ['config'] ['port'] ['p1'] ['mode']并将其设置为'amode'.然后,使用yaml.dump()再次创建该文件.另一条可能的路线是:

config a-function enable
Run Code Online (Sandbox Code Playgroud)

所以config-dict ['config'] ['a-function']必须设置为'enable'.

我的问题是更新字典时.如果Python传递值作为引用将很容易:只需遍历dict直到找到正确的值并保存它.实际上这就是我为Cmd自动完成所做的事情.但我不知道如何进行更新.

希望我现在更好地解释自己!

提前致谢.

python yaml

5
推荐指数
1
解决办法
2万
查看次数

Pythonic访问递归嵌套dict的方法

在一般情况下,我们如何对嵌套dicts进行递归访问?

from collections import defaultdict

D = lambda: defaultdict(D)
d = D()

keys = ['k1', 'k2', 'k3']
value = 'v'

if len(keys) == 3:
    k1, k2, k3 = keys
    d[k1][k2][k3] = value
else:
    ???
Run Code Online (Sandbox Code Playgroud)

我走下去的一些可怕的路径reduce,d.__getitem__d.__setitem__但觉得有肯定是一个更优雅的方式...

python recursion dictionary

5
推荐指数
1
解决办法
846
查看次数

Python存储字典路径并回读

我正在循环遍历严重嵌套的列表字典(系统信息)并以这种格式存储密钥的完整路径:

.children[0].children[9].children[0].children[0].handle = PCI:0000:01:00.0
.children[0].children[9].children[0].children[0].description = Non-Volatile memory controller
.children[0].children[9].children[0].children[0].product = Samsung Electronics Co Ltd
.children[0].children[9].product = Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2
.children[2].product = PWS-406P-1R
Run Code Online (Sandbox Code Playgroud)

接下来,读入完整路径并将其与系统信息(数据)进行比较.如何将完整路径转换为此格式?

Data['children'][0]['children'][9]['children'][0]['children'][0]['handle']
Data['children'][0]['children'][9]['product]'
Data['children'][2]['product']
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

data = re.findall(r"\.([a-z]+)\[(\d+)\]", key, re.IGNORECASE)

[('children', '0'), ('children', '9'), ('children', '0'), ('children', '0')]
[('children', '0'), ('children', '9'), ('children', '0'), ('children', '0')]
[('children', '0'), ('children', '9'), ('children', '0'), ('children', '0')]
[('children', '0'), ('children', '9')]
[('children', '2')]
Run Code Online (Sandbox Code Playgroud)

如何转换其中一个元组列表才能执行以下操作:

if Data['children'][2]['product'] == expected:
    print('pass')
Run Code Online (Sandbox Code Playgroud)

python python-3.x

5
推荐指数
1
解决办法
71
查看次数

如果键在列表中,如何更新嵌套字典中的值?

假设我有一个键列表

key_lst = ["key1", "key2", "key3"]
Run Code Online (Sandbox Code Playgroud)

我有一个价值

value = "my_value"
Run Code Online (Sandbox Code Playgroud)

以及my_dict具有此结构的示例dict

{
"key1": {
    "key2": {
        "key3": "some_value"
        }
    },
}
Run Code Online (Sandbox Code Playgroud)

如何通过遍历/循环value来动态地将变量中的新值分配给?my_dict["key1"]["key2"]["key3"]key_lst

我不能只说my_dict["key1"]["key2"]["key3"] = value因为钥匙和钥匙的数量正在改变.我总是在列表中获取密钥(我必须保存值的路径)...

我正在使用Python 3.7

python dictionary nested python-3.x

4
推荐指数
2
解决办法
714
查看次数

如何从给定的键列表中的嵌套字典中检索值?

给出一个像这样的字符串列表:

a_list_of_keys = ['a key', 'heres another', 'oh hey a key']
Run Code Online (Sandbox Code Playgroud)

什么是从dict中检索嵌套系列键的方法

the_value_i_want = some_dict['a key']['heres another']['oh hey a key']
Run Code Online (Sandbox Code Playgroud)

python dictionary list python-2.7

3
推荐指数
1
解决办法
1345
查看次数

创建计数的动态嵌套字典

我有一个文本文件abc.txt

abc/pqr/lmn/xyz:pass
abc/pqr/lmn/bcd:pass
Run Code Online (Sandbox Code Playgroud)

我需要解析这些语句,输出应该在嵌套字典中,如下所示:

{'abc':{'pqr':{'lmn':{'xyz':{'pass':1},{'bcd':{'pass':1}}}}}}
Run Code Online (Sandbox Code Playgroud)

其中 1 是'pass'计数。

我可以做这样的事情:

import re

d={}
p=re.compile('[a-zA-z]+')
for line in open('abc.txt'):
    for key in p.findall(line):
        d['key']={}
Run Code Online (Sandbox Code Playgroud)

python dictionary nested

3
推荐指数
2
解决办法
8426
查看次数

列表到python中的嵌套字典

我有一个如下列表

['item1', 'item2', 'item3', 'item4']
Run Code Online (Sandbox Code Playgroud)

我想从上面的列表中构建一个字典,如下所示

{
    "item1": {
        "item2": {
            "item3": "item4"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

列表中的项目数是动态的.字典将是嵌套字典,直到它到达列表的最后一个元素.有没有办法在python中做到这一点?

python dictionary list python-2.7

3
推荐指数
2
解决办法
696
查看次数

当密钥存储在另一个对象中时,如何访问字典值?

说我有两个这样的对象:

d={'a':{'z':1,'y':2},'b':{'z':0,'y':4}}
k=('a','y')
Run Code Online (Sandbox Code Playgroud)

我如何使用这两个对象来获取:

>>> d['a']['y'] 
2
Run Code Online (Sandbox Code Playgroud)

我需要它是动态的,所以这不起作用:

d[k[0]][k[1]]
Run Code Online (Sandbox Code Playgroud)

因为我并不总是确定字典的嵌套深度.k可以有一个或多个元素.

python

3
推荐指数
1
解决办法
155
查看次数

python的递归itemgetter

itemgetterpython中是否有递归。假设你有一个像

d = {'a': (1,2,3), 'b': {1: (5,6)}}
Run Code Online (Sandbox Code Playgroud)

我想从d['a']? 据我所知itemgetter只会做一个级别,即让我ab或两者兼而有之。

是否有一些巧妙的方式itertools与 with结合itemgetter以产生所需的结果。

所以基本上我想要能够打电话的是

from operator import itemgetter
d = {'a': (1,2), 'b': (4, (5,))}
itemgetter({'a': 0})(d) --> 1
itemgetter({'b': 0})(d) --> 4
itemgetter({'b': {1: 0}})(d) --> 5

d = {'a': {'b': (1,2,3)}}
itemgetter({'a': {'b': 2}})(d) --> 3
Run Code Online (Sandbox Code Playgroud)

python recursion

3
推荐指数
1
解决办法
829
查看次数