मेरे पास एक फ्लैट टेक्स्ट फ़ाइल है जो पदानुक्रम का प्रतिनिधित्व करती है। यह इस तरह दिखता है:
0 tom (1)
1 janet (8)
2 harry (1)
3 jules (1)
3 jacob (1)
1 mary (13)
2 jeff (1)
3 sam (2)
1 bob (28)
2 dick (1)
मैं इसे पढ़ना चाहता हूं और पदानुक्रम का प्रतिनिधित्व करने के लिए नेस्टेड डिक्शनरी (या किसी प्रकार की डेटा संरचना) बनाना चाहता हूं, इसलिए इसे प्रबंधित करना आसान है लेकिन मैं अपने सिर को डेटा संरचना को फिर से चलाने और बनाने के तरीके के आसपास नहीं लपेट सकता। शायद रिकर्सन?
पहली संख्या पदानुक्रम का स्तर है, शब्द वह नाम है जिसे मैं संग्रहीत करना चाहता हूं और कोष्ठक में मान वह मात्रा है जिसे मैं भी संग्रहीत करना चाहता हूं।
मैं इसके समान कुछ समाप्त करना चाहता हूं:
{
"tom": {
"quantity": 1,
"names": {
"janet": {
"quantity": 8,
"names": {
"harry": {
"quantity": 1,
"names": {
"jules": {
"quantity": 1
},
"jacob": {
"quantity": 1
}
}
}
}
},
"mary": {
"quantity": 13,
"names": {
"jeff": {
"quantity": 1,
"names": {
"sam": {
"quantity": 2
}
}
}
}
},
"bob": {
"quantity": 28,
"names": {
"dick": {
"quantity": 1
}
}
}
}
}
}
1 उत्तर
आप रिकर्सन का उपयोग कर सकते हैं:
import re
with open('test_hierarchy.txt') as f:
d = [[int((k:=re.findall('\d+|\w+', i))[0]), k[1], int(k[-1])] for i in f]
def to_tree(data):
if not data:
return {}
r, _key, _val = {}, None, []
for a, b, c in data:
if not a:
if _key is not None:
r[_key[0]] = {'quantity':_key[-1], 'names':to_tree(_val)}
_key, _val = (b, c), []
else:
_val.append([a-1, b, c])
r = {**r, _key[0]:{'quantity':_key[-1], 'names':to_tree(_val)}}
return {a:{'quantity':b['quantity']} if not b['names'] else b for a, b in r.items()}
import json
print(json.dumps(to_tree(d), indent=4))
आउटपुट:
{
"tom": {
"quantity": 1,
"names": {
"janet": {
"quantity": 8,
"names": {
"harry": {
"quantity": 1,
"names": {
"jules": {
"quantity": 1
},
"jacob": {
"quantity": 1
}
}
}
}
},
"mary": {
"quantity": 13,
"names": {
"jeff": {
"quantity": 1,
"names": {
"sam": {
"quantity": 2
}
}
}
}
},
"bob": {
"quantity": 28,
"names": {
"dick": {
"quantity": 1
}
}
}
}
}
}
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।