如何在python中检索列出的字典中的键值对?

如何在python中检索列出的字典中的键值对?,python,dictionary,Python,Dictionary,我有一个作为键值对的字典列表,其中我希望按键访问每个dict的数据: 样本数据: ['"imageUrl":"/images/4.jpg"', '"number":"04047122"', '"name":"test"',... 真实数据 >>> data ['"imageUrl":"/images/products/klein/04047122_k.jpg"', '"art":"04047122"', '"productId":"170336"'; } } }) '] 不

我有一个作为键值对的字典列表,其中我希望按键访问每个dict的数据:

样本数据:

['"imageUrl":"/images/4.jpg"', '"number":"04047122"', '"name":"test"',...
真实数据

>>> data
['"imageUrl":"/images/products/klein/04047122_k.jpg"', '"art":"04047122"', '"productId":"170336"'; } } }) ']
不幸的是,这种方法不起作用:

re.findall(r'(?:number\(\{)(.*)', data)[0].split(',')
如何按名称检索值,例如数据['number']?

尝试将数据转换为真正的字典:

data = ['"imageUrl":"/images/4.jpg"', '"number":"04047122"', '"name":"test"']
data_dict = dict([x.replace('"','').split(":") for x in data])
然后您将能够访问您的密钥:

print(data_dict["number"]) # output: 04047122

您可以轻松地将字符串列表转换为实际词典:

>>> ls = ['"imageUrl":"/images/4.jpg"', '"number":"04047122"', '"name":"test"']
>>> data = dict(elem.replace('"', '').split(':') for elem in ls)
>>> data
{'imageUrl': '/images/4.jpg', 'number': '04047122', 'name': 'test'}
>>> data['number']
'04047122'

对于更健壮的解决方案,由于输入列表中的每个字符串都是有效的CSV行,由冒号分隔,因此可以使用CSV.reader解析列表,然后将生成的键值对序列传递给dict构造函数以构建dict:

import csv
lst = ['"imageUrl":"/images/4.jpg"', '"number":"04047122"', '"name":"test"']
data = dict(csv.reader(lst, delimiter=':'))

然后,您可以根据需要访问数据['number'.

看起来您有一个字符串列表,每个字符串都显示一个key:value对。为什么不将其转换为实际的dict?'imageUrl:/images/4.jpg'是一个字符串,而不是一个字典。请注意,这仅在键和值中的字符串不包含或:本身时才起作用。我得到了一个文件,第1行,在ValueError中:字典更新序列元素9的长度为1;2是必需的请注意,这仅在键和值中的字符串不包含或:本身时才有效。我在ValueError中得到一个文件,第1行:dictionary update sequence元素31的长度为3;2是必需的。显然,输入列表中的某些字符串包含2个以上以冒号分隔的项。如果您需要帮助修复错误,请使用实际输入的样本更新您的问题。谢谢,您是对的。我更新了我的问题并加入了真实的数据。什么样的来源产生了这样的输入?更新后的输入列表示例末尾的字符串只是不完整的代码段,与您描述的键值对相差甚远。在这种情况下,你需要修正这些数据来自哪个来源的逻辑。显然不是一个好的来源。我通过regex:re.findall'.*?:name:.*?\,d[0]获得了我的结果。谢谢您的帮助。