在字典和列表中寻找整数

时间:2019-04-20 02:12:59

标签: python dictionary

我有一些txt文件,其中包含列表和字典的组合:

{"e":[[{"e":86,"c":23,"a":
{"a":[120,169,"green","red","orange"],"b":"red"},"g":"yellow","b":
["yellow"],"d":"red","f":-19},{"e":-47,"a":[2],"d":{"a":"violet"}}

我想找到此文件中的所有数字并获取其摘要。

我当时正在考虑也许通过使用for循环并查找int来遍历元素,但是它不起作用,因为“ for”将元素视为所有词典或该第一本词典中的列表,并且不会更深入地研究词典和列表。我不想完成程序,但也许可以找到一些线索来解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式查找所有数字,并将其存储在列表中,然后进行以下操作:

# read text from file
with open('somefile.txt', 'r') as f:
    text = f.read()

import re
match = re.findall(r'-?\d+', text)
print(match)

输出:

['86', '23', '120', '169', '-19', '-47', '2']

解释正则表达式模式'-?\ d +':

'-?'文字可能带有符号

'\ d +'文本包含任意数量的相邻数字

修改

如@arjoonn的评论中所述,上述模式可能会捕获文本中的数字,因此请避免使用以下示例为正则表达式模式添加条件:

import re
text = '2tex809t12 23 [4] -2'
match = re.findall(r'(?<!\w)-?\d+(?!\w)', text)
print(match)

输出:

['23', '4', '-2']

说明: '(?!\w)'被称为否定前瞻,这意味着匹配的文本不应包含数字后的任何字符

'(?<!\w)'与上面的相同,但是在后面(即之前)起否定作用

相关问题