如何从Python中的列表列表中提取两个值,其中子列表以特定的数字开头?[副本]

cyej8jka  于 2023-05-30  发布在  Python
关注(0)|答案(2)|浏览(135)

此问题已在此处有答案

Searching a list of objects in Python(10个答案)
How slicing in Python works(38个回答)
4天前关闭。
我有一个列表列表,我想在其中搜索一个特定的数字来检索该特定的列表:
我有一个列表,其中包含以下值:[[266, 5300, 2696, 50.88], [36, 5191, 2938, 53.16], [875, 5133, 2553, 51.29]],我想得到包含数字875的列表,我想检索该列表中的第二个(5133)和第三个(2553)数字。我如何在这个列表中搜索875并返回这两个值?我不能索引,因为顺序每次都会改变,但是id(875)总是列表中的第一个数字。
我试着索引,但每次顺序都会改变,我不知道如何在列表中搜索以找到以数字开头的特定列表
这里有一段代码,但我不知道从哪里开始搜索列表:

id = {"id1": 887, "id2": 126}
url = "example.com"
# Send GET request to the URL
response = requests.get(url)
# Check if the request was successful (status code 200)
if response.status_code == 200:
# Parse the JSON response
json_data = response.json()
# Pretty print the JSON data
wr_value = json_data['header']['wr']
vsRTop = json_data['top']

我如何解析'top'来获得值,例如使用id1?

odopli94

odopli941#

你可以使用一个简单的list comprehension:

out = [l[1:3] for l in vsRTop if l[0]==875]

输出:

[[5133, 2553]]

或者,如果您只想要第一个匹配(如果有的话),请使用生成器表达式和next

val1, val2 = next((l[1:3] for l in vsRTop if l[0]==875),
                  (None, None))

输出:

5133, 2553

使用的输入:

vsRTop = [[266, 5300, 2696, 50.88],
          [36, 5191, 2938, 53.16],
          [875, 5133, 2553, 51.29]]
sczxawaw

sczxawaw2#

如果我理解了你的问题,那么要在基于特定数字的列表列表中搜索特定的列表,你需要迭代每个子列表并检查第一个元素是否与所需的数字匹配。

id = {"id1": 887, "id2": 126}
url = "example.com"
response = requests.get(url)

if response.status_code == 200:
  json_data = response.json()
  top_data = json_data['top']
  for item in top_data:
    if item[0] == id["id1"]:
      value1 = item[1]
      value2 = item[2]

相关问题