我还是Python的新手,我仍然在这方面尝试了很多新东西。我正在使用包含JSON数据的API,如下所示:
products: [
{
id: 66057248,
createdAt: "2018-02-28T14:55:22+01:00",
updatedAt: "2018-04-26T20:44:12+02:00",
isVisible: true,
visibility: "visible",
hasMatrix: false,
data01: "",
data02: "",
data03: "",
url: "product-name",
title: "product name",
fulltitle: "product name",
etc...
我现在要做的是让用户提供他想要相互比较的JSON文件中的值的输入。我尝试了几件事,但到目前为止没有结果。我可能做了一些愚蠢的事,但我不知道是什么。
正如您在下面的代码中所看到的,我向用户询问了两次输入,这些值是我想要添加到下面的for循环中的值。我现在的问题是,我做错了什么以及如何在for
循环中插入输入数据?
import requests
import json
response = requests.get('http://inserturlhere.com')
data =response.text
parsed=json.loads(data)
first_value = input ('Name of first value: ')
second_value = input ('Name of second value: ')
first_test = ['first_value']
second_test = ['second_value']
for product in parsed['products']:
if product[first_test] == product[second_test] :
print(product['id'])
答案 0 :(得分:1)
目前尚不清楚first_test
和second_test
在您的代码中的用途。但这可能是你想要做的吗?
import requests
response = requests.get('http://inserturlhere.com')
products = response.json()['products']
first_value = input('Name of first value: ')
second_value = input('Name of second value: ')
for product in products:
if product[first_value] == product[second_value]:
print(product['id'])
请注意,first_value或second_value的用户输入中的任何拼写错误都将导致KeyError,因此您应该使用try-except包含som错误处理。
答案 1 :(得分:1)
以下是使用最少数据的几种解决方案。您的代码无效的主要原因是您引入了不必要的变量first_test
和second_test
。
这假设,如您的问题中所述,您希望在给定2个参数输入的情况下测试json中2个值的相等性。
<强>设置强>
products = [{'id': 545453435453,
'title': "product name",
'fulltitle': "product name"},
{'id': 123454686786,
'title': "product name2",
'fulltitle': "product name3"}]
first_value = input('Name of first value: ')
second_value = input('Name of second value: ')
解决方案1:迭代
for product in products:
if product[first_value] == product[second_value] :
print(product['id'])
# Name of first value: title
# Name of second value: fulltitle
# 545453435453
解决方案2:pandas
这涉及第三方库pandas
,这对于重复呼叫会更有效。
import pandas as pd
df = pd.DataFrame(products)
res = df[df[first_value] == df[second_value]]
# Name of first value: title
# Name of second value: fulltitle
#
# fulltitle id title
# 0 product name 545453435453 product name