python - 将 api 响应操作到对象键/值对列表中
问题描述
无法为我的前端处理这些数据。
这是我的 API 响应,它是一个字典列表:
{
"name": "bob",
"age": 22,
"gender": male
},
{
"name": "zack",
"age": 43,
"gender": male
}
这是所需的输出,另一个字典列表:
{id: 0, column: "age", bob: 22, zack: 43},
{id: 1, column: "gender", bob: male, zack: male}
因此,如果返回另一个名称,则只需将其添加为键并获取年龄/性别等的相应值。
这是我目前得到的输出:
{id: 0, column: "age", bob: 22},
{id: 1, column: "gender", bob: male},
{id: 0, column: "age", zack: 43},
{id: 1, column: "gender", zack: male}
因此,对于每个 dicts 列表,我选择列,使用名称具有一种标识符,并为特定列分配相应的值。
我无法将每个人的姓名(在这种情况下为键)添加到具有相应值、年龄、性别等的相同字典列表中。这是我目前拥有的代码。
my_list = []
counter = 0
for d in data:
for k, v in d.items():
dict = {}
length = len(d.keys())
if counter == length:
counter = 0
value = d['name']
dict['id'] = counter
dict['column'] = k
dict[value] = v
my_list.append(dict)
counter += 1
有人可以指出我正确的方向吗?
解决方案
利用:
data = [{
"name": "bob",
"age": 22,
"gender": "male"
},
{
"name": "zack",
"age": 43,
"gender": "male"
}]
keys = ["age", "gender"]
lookup = {key: {"id": i, "column" : key} for i, key in enumerate(keys)}
for d in data:
name = d.pop("name")
for key, value in d.items():
lookup[key][name] = value
res = list(lookup.values())
print(res)
输出
[{'id': 0, 'column': 'age', 'bob': 22, 'zack': 43}, {'id': 1, 'column': 'gender', 'bob': 'male', 'zack': 'male'}]
或者不改变原始字典的替代方法:
keys = ["age", "gender"]
lookup = {key: {"id": i, "column" : key} for i, key in enumerate(keys)}
for d in data:
name = d["name"]
for key in (d.keys() - {"name"}):
lookup[key][name] = d[key]
res = list(lookup.values())
print(res)
输出
[{'id': 0, 'column': 'age', 'bob': 22, 'zack': 43}, {'id': 1, 'column': 'gender', 'bob': 'male', 'zack': 'male'}]
更新
如果事先不知道密钥,您可以执行以下操作:
lookup = {}
for d in data:
name = d["name"]
for key in (d.keys() - {"name"}):
if key not in lookup:
lookup[key] = {key: {"id": len(lookup), "column": key}}
lookup[key][name] = d[key]
res = list(lookup.values())
print(res)
推荐阅读
- powershell - 多台计算机可以使用 PowerShell 将数据写入一台远程计算机中的单个文件吗?
- java - 如何在 cas-overlay-5.1.x 中使用 spring-cloud-zookeeper-discovery
- c++ - 将元素从 opencv 矩阵复制到特征矩阵
- bash - How to use user input to select a variable in bash?
- c - 为什么 C11 全局和局部静态断言的行为不同?
- kotlin - 在没有析构函数/生命周期的类中启动协程
- c# - 如何使用 SimpleInjector 注册 CustomContext(DbConnection 连接,DbCompiledModel 编译模型)?
- spring-boot - Spring boot 2 + Microsoft AD 身份验证 + 未找到 userPassword 属性
- javascript - 在 react native 中从 firebase firestore 收集数据返回未定义的承诺之外
- fragment-shader - 在 Godot 片段着色器中绘制矩形的问题