Python 中如何将已定义的变量和值放入字典中

69 阅读2分钟

在 Python 中,有时需要将已经定义的变量和值放入字典中,以便进行后续处理或存储。然而,直接将变量名作为字典的键,只会存储变量名本身,而不是变量的值。这可能会导致数据丢失或处理错误。

huake_00183_.jpg 以下是具体问题的描述:

  • 已有代码通过 HTTP GET 请求获取了一些变量,并使用其中一些变量进行了 API 调用,从而获得了 JSON 数据。
  • 需要将初始 GET 请求中的某些变量和 API 调用返回的某些值放入自己的字典中,以便存储在 Redis 列表中。
  • 目前代码中使用字符串文字作为字典的键,导致打印出的字典中只包含变量名,而不是变量的值。

2、解决方案

为了将已定义的变量和值放入字典中,需要使用变量本身作为字典的键,而不是变量名。可以使用以下步骤来解决问题:

  1. 将变量名替换为变量本身。例如,将 'uEmail' 替换为 uEmail
  2. 将 API 调用返回的 JSON 数据中的值提取出来,并将其作为字典的值。例如,将 instaINFO['data']['user']['profile_picture'] 提取出来,作为键为 profilePIC 的值的字符串形式。
  3. 使用这些变量和值创建字典。例如:
ltvMSG = {
    'fromEMAIL': uEmail,
    'toCHANNELID': channelID,
    'timeSENT': uTime,
    'profilePIC': instaINFO['data']['user']['profile_picture'],
    'userNAME': instaINFO['data']['user']['username'],
    'msgBODY': instaINFO['data']['caption']['text'],
    'msgIMAGE': instaINFO['data']['images']['standard_resolution']['url']
}

现在,打印 ltvMSG 将输出正确的字典,其中包含变量的值,而不是变量名。

代码示例:

import requests
import json

# 定义要获取的变量
instaShortcode = 'YOUR_INSTAGRAM_SHORTCODE'  # 替换为实际的 Instagram 短码

# 发送 HTTP GET 请求并获取变量
path = 'SOME_URL_PATH'
if 'instagramTV' in path:
    response = requests.get(path)
    if response.status_code == 200:
        LTV = response.json()['channelID']
        EMAIL = response.json()['uEmail']
        TIME = response.json()['Time']
        userID = response.json()['uID']
        URL = response.json()['contentUrl']

        # 清理变量
        channelID = str(LTV)[2:-2]
        uEmail = str(EMAIL)[2:-2]
        instagramShortcode = str(instaShortcode)[2:-2]
        uTime = str(TIME)[2:-2]
        uID = str(userID)[2:-2]
        contentUrl = str(URL)[2:-2]

        # 获取 Instagram API 数据
        instaSTEP2 = requests.get("http://api.instagram.com/oembed?url=http://instagr.am/p/%s/" % instagramShortcode).json()
        instaMeID = instaSTEP2['media_id']
        instaINFO = requests.get("https://api.instagram.com/v1/media/%s?accesstoken=YOUR_ACCESS_TOKEN" % instaMeID).json()

        # 创建字典
        ltvMSG = {
            'fromEMAIL': uEmail,
            'toCHANNELID': channelID,
            'timeSENT': uTime,
            'profilePIC': instaINFO['data']['user']['profile_picture'],
            'userNAME': instaINFO['data']['user']['username'],
            'msgBODY': instaINFO['data']['caption']['text'],
            'msgIMAGE': instaINFO['data']['images']['standard_resolution']['url']
        }

        # 打印字典
        print(ltvMSG)

运行上面的代码,即可在控制台输出正确的字典,其中包含变量的值,而不是变量名。