मेरे पास शब्दकोशों की एक सूची है और शब्दकोशों में मिश्रण डेटा प्रकार हैं, यानी str, int, float, dict, list, इत्यादि। इसलिए, मैं यह सुनिश्चित करना चाहता हूं कि प्रत्येक गहराई पर प्रत्येक आइटम को स्ट्रिंग में परिवर्तित कर दिया जाए यदि यह int नहीं है या str, यानी मैं इसे DynamoDB में रखना चाहता हूं। यहां वह कोड है जिसका मैं प्रयास कर रहा हूं:

  def to_map(data):
    if(type(data) == list):
        for item in data:
            to_map(item)


    if type(data) == dict:    
        for attr in data:
            to_map(data[attr])

    if (type(data) != str) and (type(data) != int):
        return str(data) 

    return data
2
Faizan Ali 2 अप्रैल 2018, 21:27

3 जवाब

सबसे बढ़िया उत्तर

जब आप किसी शब्दकोश पर लूप करते हैं, तो आपको केवल कुंजियाँ मिलती हैं, मान भी नहीं। इसके अतिरिक्त, str(my_str) == my_str के बाद से, आपको यह जांचने की आवश्यकता नहीं है कि कोई मान एक str है या नहीं इसे परिवर्तित करने से पहले। साथ ही, type(x) == ? के बजाय isinstance का उपयोग करें। क्या आप ऐसा कुछ ढूंढ रहे हैं?

def to_map(data):
    if isinstance(data, list):
        return [to_map(x) for x in data]
    elif isinstance(data, dict):
        return {to_map(key): to_map(val) for key, val in data.items()}
    elif isinstance(data, int) and not isinstance(data, bool):
        return data
    else:
        return str(data)
3
scnerd 2 अप्रैल 2018, 18:39

आपको शायद json पैकेज और json.dumps अपने शब्दकोश का उपयोग करना चाहिए। यह आपके शब्दकोश के साथ एक जेसन स्ट्रिंग बनाएगा जिसे आप डायनेमोडीबी में जेएसओएन दस्तावेज़ के रूप में या सीधे स्ट्रिंग के रूप में स्टोर कर सकते हैं यदि आप इतने इच्छुक हैं। इस मामले में आप बाद में इसे पढ़ सकते हैं और json.loads इसे वापस एक अजगर शब्दकोश में बदल सकते हैं।

JSON का उपयोग करने का अर्थ यह भी है कि यदि आपको अन्य उत्पादों या एप्लिकेशन के साथ इंटरफ़ेस करने की आवश्यकता है, तो आपको भविष्य में कम संगतता समस्याएं होंगी।

0
Manu Valdés 2 अप्रैल 2018, 18:49

अनुरोध के अनुसार यदि संभव हो तो इनट्स को छोड़कर यह सभी मानों को str में परिवर्तित कर देता है:

def to_map(iterable):
    if type(iterable) == list:
        return [str(item) if (type(item) not in [dict,str,list,int]) else to_map(item) for item in iterable ]
    elif type(iterable) == dict:
        return dict([[item,str(iterable[item])] if type(iterable[item]) not in [dict,str,list,int] else [item,to_map(iterable[item])] for item in iterable])
    elif type(iterable) == int:
        return iterable
x = {'1':2,'2':{'5':6,'6': False,'7':[1,2,3,4.55454]}}

print(to_map(x))
>> {'1': 2, '2': {'5': 6, '6': 'False', '7': [1, 2, 3, '4.55454']}}
0
Zak Stucke 2 अप्रैल 2018, 18:54