Python 从字典列表中提取键值
Python extract values of a key from a list of lists of dictionaries
我有一个字典列表列表。该列表不断使用流中的新数据构建。
[
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}], ....... and so on ]
(新列表不断从流中创建)
我需要从 'p' 中提取值,但要保持列表的格式与它们完全一样:
[[12562.12, 12562.12], [12562.12, 12562.12, 12562.12], [12562.12], ....... and so on ]
你可以通过列表理解来做到这一点:
pValues = [[d["p"] for d in row] for row in data]
这会遍历字典列表的每一行,然后遍历行中的每个字典并获取每个字典的“p”值。 (注意data
是你的字典列表列表)
你可以试试正则表达式:
import re
s = '''[[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}]]'''
results = []
for line in s.splitlines():
results.append(re.findall("(?<='p': ').*?(?=')", line))
print(results)
输出:
[['12562.12', '12562.12']]
[['12562.12', '12562.12'], ['12562.12', '12562.12', '12562.12']]
[['12562.12', '12562.12'], ['12562.12', '12562.12', '12562.12'], ['12562.12']]
哪里
for line in s.splitlines():
将替换为您的连续流。
我有一个字典列表列表。该列表不断使用流中的新数据构建。
[
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}], ....... and so on ]
(新列表不断从流中创建)
我需要从 'p' 中提取值,但要保持列表的格式与它们完全一样:
[[12562.12, 12562.12], [12562.12, 12562.12, 12562.12], [12562.12], ....... and so on ]
你可以通过列表理解来做到这一点:
pValues = [[d["p"] for d in row] for row in data]
这会遍历字典列表的每一行,然后遍历行中的每个字典并获取每个字典的“p”值。 (注意data
是你的字典列表列表)
你可以试试正则表达式:
import re
s = '''[[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}, {'T': 1626610583088, 'p': '12562.12'}],
[{'T': 1626610583088, 'p': '12562.12'}]]'''
results = []
for line in s.splitlines():
results.append(re.findall("(?<='p': ').*?(?=')", line))
print(results)
输出:
[['12562.12', '12562.12']]
[['12562.12', '12562.12'], ['12562.12', '12562.12', '12562.12']]
[['12562.12', '12562.12'], ['12562.12', '12562.12', '12562.12'], ['12562.12']]
哪里
for line in s.splitlines():
将替换为您的连续流。