簡體   English   中英

如何刪除要用作變量的字符串中的引號-python

[英]How do I remove the quotation marks off of a string to be used as a variable - python

我試圖從列表中選擇一個隨機項目,然后從詞典中選擇一個與列表中名稱相同名稱的隨機項目。

import random

letters = ["a" , "b" , "c"]

a = {
  "item1": "Q",
  "item2": "W",
}
b = {
  "item1": "E",
  "item2": "R",
}
c = {
  "item1": "T",
  "item2": "Y",
}

item_num = random.randint(0, len(letters)-1)
print(letters[item_num].get([random.randint(0, 1)]))

我總是得到相同的錯誤: AttributeError: 'str' object has no attribute 'get' ,所以我認為這是由於item_num將= 'a''a'東西而不是沒有引號的a而引起的。 任何幫助表示贊賞!

出現該錯誤的原因是您正在調用get on str

item_num是一個int 您可以用它訪問一個letters元素,這很好,因為letters是一個list 然而,一個元素lettersstr'a''b''c' ),你顯然不能稱之為get的。

您想要做的就是在字典上調用get ,它對應於您得到的letters[item_num]的值。 因此,這可能會滿足您的要求:

import random

letters = ["a" , "b" , "c"]

a = {
  "item1": "Q",
  "item2": "W",
}
b = {
  "item1": "E",
  "item2": "R",
}
c = {
  "item1": "T",
  "item2": "Y",
}

source = random.choice(letters)

print(globals()[source].get(f'item{random.randint(1, 2)}'))

也就是說,這可能不是您應該做的(對全局變量的編程訪問)。 相反,您可以考慮:

  • 使用嵌套字典,其中['a', 'b', 'c']是鍵
  • 不需要隨機整數的額外的處理來獲得所述第二級的鍵( 12為鍵,而不是'item1''item2'

例:

data = {'a': {1: 'Q',
              2: 'W'}
        ...}

如果使用的是全局范圍,則可以使用globals()或eval字母:

同樣,為了從字典中選擇一個隨機項目,您需要知道鍵,然后隨機選擇一個:

item_num = random.randint(0, len(letters)-1)
rand_key = random.choice(["item1", "item2"]) 
print(globals()[letters[item_num]].get(rand_key))
item_num = random.randint(0, len(letters)-1)
rand_key = random.choice(["item1", "item2"]) 
print(eval(letters[item_num]).get(rand_key))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM