मैं प्रोग्रामिंग के लिए काफी नया हूं और टीम किले 2 खिलाड़ियों से सूची डेटा लाने के लिए एक कार्यक्रम बनाया है और सूची आइटम को कुंजी के रूप में स्टीमिड के साथ एक शब्दकोश में डाल दिया है ।पाइथन शब्दकोश रैम खाने
जिस समस्या में मैं दौड़ रहा हूं वह यह है कि शब्दकोश में लगभग 6000 प्रविष्टियों के बाद कार्यक्रम ने मेरे सिस्टम पर सभी रैम को अनिवार्य रूप से चूसा और बंद कर दिया है।
मुझे लगता है कि शब्दकोश का अनुमान लगाना बहुत बड़ा हो गया है, लेकिन मैंने इसी तरह के प्रश्नों से जो पढ़ा है, उससे 6000 प्रविष्टियों के एक नियम को मेरी अधिकांश रैम नहीं लेनी चाहिए।
मैं अन्य समाधानों में देख रहा हूं लेकिन मैं अपने कोड के लिए कुछ ठोस उदाहरणों का उपयोग कर सकता हूं।
import re, urllib.request, urllib.error, gzip, io, json, socket, sys
with open("index_to_name.json", "r", encoding=("utf-8")) as fp:
index_to_name=json.load(fp)
with open("index_to_quality.json", "r", encoding=("utf-8")) as fp:
index_to_quality=json.load(fp)
with open("index_to_name_no_the.json", "r", encoding=("utf-8")) as fp:
index_to_name_no_the=json.load(fp)
with open("steamprofiler.json", "r", encoding=("utf-8")) as fp:
steamprofiler=json.load(fp)
inventory=dict()
playerinventories=dict()
c=0
for steamid in steamprofiler:
emptyitems=[]
items=emptyitems
try:
url=urllib.request.urlopen("http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid="+steamid+"&format=json")
inv=json.loads(url.read().decode("utf-8"))
url.close()
except (urllib.error.HTTPError, urllib.error.URLError, socket.error) as e:
c+=1
print("URL/HTTP error, continuing")
continue
try:
for r in inv["result"]["items"]:
inventory[r["id"]]=r["quality"], r["defindex"]
except KeyError:
c+=1
print(steamid, "didn't have an inventory")
continue
for key in inventory:
try:
if index_to_quality[str(inventory[key][0])]=="":
items.append(
index_to_quality[str(inventory[key][0])]
+""+
index_to_name[str(inventory[key][1])]
)
else:
items.append(
index_to_quality[str(inventory[key][0])]
+" "+
index_to_name_no_the[str(inventory[key][1])]
)
except KeyError:
print("Key error, uppdate def_to_index")
c+=1
continue
playerinventories[int(steamid)]=items
items=emptyitems
c+=1
print(c, "inventories fetched")
मैं वास्तव में, जबकि उपस्थिति, शब्दकोश जो काफी महत्वपूर्ण है क्योंकि मैं जिसका सूची यह है बताने के लिए सक्षम होने के लिए चाहते हैं बनाए रखने के यह करने के लिए किसी भी अन्य तरीके का पता नहीं है। मैं इस में से किसी में स्पष्ट नहीं किया गया है, तो बस इतना कहते हैं कि और मेरा मानना है कि यह अपने कोड के साथ एक समस्या को दिखाता है मैं
तो जोड़ना: सूची = dict() आइटम = सूची() "steamprofiler में भाप के लिए" लूप को स्मृति को हॉगिंग को रोकना चाहिए कुछ मात्रा में या कुछ हद तक? मैं इन्वेंट्री लूप के साथ समस्या को समझ नहीं पा रहा हूं, इन्वेंट्री में प्रमुख मान index_to_name और index_to_quality में नामों के अनुरूप हैं, आपका समाधान बेहतर कैसे करता है? मैं यहाँ मुंह नहीं दे रहा हूं, मैं वास्तव में उत्सुक हूं क्योंकि मैं काफी नया हूं। – Tenbin
'सूची' पर लूप के बारे में, मैं बस थोड़ा अजीब था कि आप 'सूची [कुंजी] [0]' और 'सूची [कुंजी] [0] 'तक पहुंच रहे थे और कहीं और' कुंजी 'तक नहीं पहुंच रहे थे। यदि वे मान हैं जिन्हें आपको उपयोग करने की आवश्यकता है (अपने अन्य शब्दकोशों में अनुक्रमणित करने के लिए), तो मेरा सुझाव है कि आप लूप को सीधे उन पर बना दें। यदि 'सूची [कुंजी]' दो तत्व टुपल या सूची है, तो आप इसे 'for' कथन में दो चरों में अनपैक कर सकते हैं। मैं यह दिखाने के लिए अपना जवाब संपादित करूंगा कि उचित इंडेंटेशन के साथ यह कैसा दिखाई देगा। – Blckknght