给出以下内容(很长的内容列表的一部分):
{'diet': {'Diet 0': {'gender': 0,
'nutrients': {'Alcohol': {'min': 0, 'max': 14, 'unit': 'oz'},
'Caffeine': {'min': 0, 'max': 400, 'unit': 'mg'},
'Copper': {'min': 0, 'max': 0, 'unit': 'mg'},
'Calcium': {'min': 1000, 'max': 2500, 'unit': 'mg'},
'Choline': {'min': 425, 'max': 3500, 'unit': 'mg'},
'Cholesterol': {'min': 0, 'max': 300, 'unit': 'mg'},
'Fluoride': {'min': 0, 'max': 0, 'unit': 'mg'},
'SaturatedFat': {'min': 0, 'max': -1, 'unit': 'g'},
'VitaminA': {'min': 2330, 'max': 10000, 'unit': 'IU'},
'VitaminC': {'min': 75, 'max': 2000, 'unit': 'mg'},
'VitaminD': {'min': 15, 'max': 100, 'unit': 'mcg'},
'VitaminE': {'min': 15, 'max': 1000, 'unit': 'mg'},
'VitaminK': {'min': 0, 'max': 0, 'unit': 'mcg'},
'VitaminB1': {'min': 1.1, 'max': 0, 'unit': 'mg'},
'VitaminB2': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB5': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB3': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB6': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB12': {'min': 2.4, 'max': 999999999, 'unit': 'mcg'},
'Fiber': {'min': 21, 'max': 70, 'unit': 'g'},
'Folate': {'min': 400, 'max': 1000, 'unit': 'mcg'},
'FolicAcid': {'min': 0, 'max': 0, 'unit': 'mcg'},
'Iodine': {'min': 0, 'max': 0, 'unit': 'mcg'},
'Iron': {'min': 18.0, 'max': 45, 'unit': 'mg'},
'Magnesium': {'min': 310, 'max': 350, 'unit': 'mg'},
'Manganese': {'min': nan, 'max': 0, 'unit': 'mg'},
'Phosphorus': {'min': 700, 'max': 4000, 'unit': 'mg'},
'Potassium': {'min': 2600, 'max': 0, 'unit': 'mg'},
'Selenium': {'min': 0, 'max': 0, 'unit': 'mcg'},
'Sodium': {'min': 500, 'max': 2300, 'unit': 'mg'},
'Sugar': {'min': nan, 'max': 24, 'unit': 'g'},
'Zinc': {'min': 8.0, 'max': 40, 'unit': 'mg'}}}}}
我的列表中有10000个这样的DICT,我想将SaturatedFat
键更改为saturatefat
。使用ast
尝试:
import ast
ast.literal_eval(str(diet_specs_dicts[0]).replace("'SaturatedFat':","'Saturated Fat':"))
返回一个错误:
--------------------------------------------------------------------------- ValueError Traceback(最近的调用最后)在1导入ast---
/usr/lib/python3.8/ast.pyliteral_eval(node_or_string)97返回左-右98返回_convert_signed_num(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)86如果len(node.keys)!=len(node.values): 87_raise_malformed_node(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)86如果len(node.keys)!=len(node.values): 87_raise_malformed_node(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)86如果len(node.keys)!=len(node.values): 87_raise_malformed_node(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)86如果len(node.keys)!=len(node.values): 87_raise_malformed_node(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)86如果len(node.keys)!=len(node.values): 87_raise_malformed_node(节点)---
/usr/lib/python3.8/ast.py在_convert(节点)96其他: 97返回左-右---
/usr/lib/python3.8/ast.py在_convert_signed_num(节点)73其他: 74返回-操作数---
/usr/lib/python3。8/ast。py in _convert_num(节点)64 def _convert_num(节点):65如果不在(节点,常量)或类型(节点.值)不在(int,float,complex):---
/usr/lib/python3。8/ast。py in_raise_格式错误的_节点(node)61 node_或_string=node_或_string。主体62 def_raise_畸形节点(节点):---
错误:格式错误的节点或字符串:
可以使用递归函数来更改嵌套层次结构中出现的键:
为函数定义中的输入错误而编辑
>>> d = {'diet': {'Diet 0': {'gender': 0,
...: 'nutrients': {'Alcohol': {'min': 0, 'max': 14, 'unit': 'oz'},
...: 'Caffeine': {'min': 0, 'max': 400, 'unit': 'mg'},
...: 'SaturatedFat': {'min': 0, 'max': -1, 'unit': 'g'},
...: 'VitaminA': {'min': 2330, 'max': 10000, 'unit': 'IU'}}}}}
>>> def replace_key(d, old_key, new_key):
...: for k, v in tuple(d.items()):
...: if k == old_key:
...: d[new_key] = d.pop(old_key)
...:
...: if isinstance(v, dict):
...: replace_key(v, old_key, new_key)
...:
>>> replace_key(d, old_key='SaturatedFat', new_key='Saturated Fat')
>>> d
{'diet': {'Diet 0': {'gender': 0,
'nutrients': {'Alcohol': {'min': 0, 'max': 14, 'unit': 'oz'},
'Caffeine': {'min': 0, 'max': 400, 'unit': 'mg'},
'VitaminA': {'min': 2330, 'max': 10000, 'unit': 'IU'},
'Saturated Fat': {'min': 0, 'max': -1, 'unit': 'g'}}}}}
此函数就地更改字典,并返回无
,但很容易修改为返回副本,保持原始字典不变:
>>> import copy
>>> def replace_key(d, old_key, new_key):
...: d = copy.deepcopy(d)
...: for k, v in tuple(d.items()):
...: if k == old_key:
...: d[new_key] = d.pop(old_key)
...:
...: if isinstance(v, dict):
...: replace_key(v, old_key, new_key)
...:
...: return d
在这里你去
lst = [{'diet': {'Diet 0': {'gender': 0,
'nutrients': {'Alcohol': {'min': 0, 'max': 14, 'unit': 'oz'},
'Caffeine': {'min': 0, 'max': 400, 'unit': 'mg'},
'Copper': {'min': 0, 'max': 0, 'unit': 'mg'},
'Calcium': {'min': 1000, 'max': 2500, 'unit': 'mg'},
'Choline': {'min': 425, 'max': 3500, 'unit': 'mg'},
'Cholesterol': {'min': 0, 'max': 300, 'unit': 'mg'},
'Fluoride': {'min': 0, 'max': 0, 'unit': 'mg'},
'SaturatedFat': {'min': 0, 'max': -1, 'unit': 'g'},
'VitaminA': {'min': 2330, 'max': 10000, 'unit': 'IU'},
'VitaminC': {'min': 75, 'max': 2000, 'unit': 'mg'},
'VitaminD': {'min': 15, 'max': 100, 'unit': 'mcg'},
'VitaminE': {'min': 15, 'max': 1000, 'unit': 'mg'},
'VitaminK': {'min': 0, 'max': 0, 'unit': 'mcg'},
'VitaminB1': {'min': 1.1, 'max': 0, 'unit': 'mg'},
'VitaminB2': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB5': {'min': 0, 'max': 0, 'unit': 'mg'},
'VitaminB3': {'min': 0, 'max': 0, 'unit': 'mg'}, ............................]
for d in lst:
d['Saturated Fat'] = d.pop('SaturatedFat')
print(lst)
问题内容: 我的应用程序中有一个非常复杂的数据结构,需要对其进行操作。我试图跟踪玩家在他们的花园中有多少种错误。有十种错误,每种错误都有十种模式,每种模式都有十种颜色。所以可能有1000个独特的错误,我想追踪玩家每种类型的错误数量。嵌套的字典如下所示: 我没有使用此语法的任何错误或投诉。 当我想增加播放器的错误收集时,请执行以下操作: 我收到此错误: 字符串不能转换为’DictionaryInde
问题内容: 我已经从网站下载了json数据,我想从嵌套的json中选择特定的key:values。我将json转换为python字典。然后,我使用字典理解来选择嵌套的key:values,但是嵌套太多了,我相信有比单独扩展每个字典更好的方法。我在我的方法中看到了冗余。您能建议一个更好的方法吗? 我的方法: 从datetime导入datetime,timedelta 问题答案: 我建议您使用,具有完
问题内容: 我已经从网站下载了json数据,我想从嵌套的json中选择特定的key:values。我将json转换为python字典。然后,我使用字典理解来选择嵌套的key:values,但是嵌套太多了,我相信有比单独扩展每个字典更好的方法。我在我的方法中看到了冗余。您能建议一个更好的方法吗? 我的方法: 从datetime导入datetime,timedelta 问题答案: 我建议您使用,具有完
问题内容: 我有类似的东西 并且需要具有: 非常感谢! 编辑:我想按subkey1进行排序,这之前还不清楚。 问题答案: 使用关键字表示功能和方法: 演示: 假定 所有 顶级词典都具有一个键,该键被假定为带有键的字典。 有关更多详细信息和技巧,请参见Python Sorting HOWTO 。
问题内容: 我正在寻找一种使用dict update内容更新dict dictionary1的方法 我知道update会删除level2中的值,因为它正在更新最低的密钥level1。 鉴于dictionary1和update可以有任何长度,我该如何解决? 问题答案: @FM的答案具有正确的总体思路,即递归解决方案,但有些特殊的编码和至少一个错误。我建议改为: Python 2: Python 3:
问题内容: 我正在处理一个复杂的嵌套字典和列表数据结构。我需要将数据展平并将所有嵌套项都置于0级。有关更多说明,请参见以下示例: 我需要将其展平为: 我从这篇文章的第一个答案中获得了参考,但是只有在我嵌套了字典的情况下它才可以工作,如果列表嵌套在字典中并且更多的词典嵌套在这些列表中,则它不能工作。 我对代码做了一些修改以适合我的用例,但是此代码不起作用 当我在此处粘贴代码时,缩进变得混乱。但我真的
问题内容: 我有以下格式的字典: 演示代码: 我无法获得嵌套字典在内存中的存储方式,因为size如果是136个字节,size是80个字节,而且size是520个字节。 另外,当我对类型从到的变量数据进行类型转换时,字符串变量的大小为。 演示代码: 可以解释一下为什么吗? 问题答案: 字典和列表存储 引用 (类似于Python中的其他所有标准容器)。不遵循引用,它给你的C结构的内存占用 唯一 。引用
问题内容: 我有一个数据框,我想根据另一个计划用作字典的数据框重命名列。例如,我拥有的第一个数据框是: 作为第二个数据框,我想用作字典: 我想得到的结果如下: 最初,我想将第一个数据框重塑为长格式,然后与字典数据框合并,然后重塑为宽格式。但是我认为这效率很低,因此我想使用一种更有效的方法(如果存在)。非常感谢您的帮助。 问题答案: 我觉得你可以先创建从,然后创建从列由您再使用: