मेरे पास एक असाइनमेंट है और मैं इसे बिना किसी लाभ के घंटों तक हल करने का प्रयास कर रहा हूं। शब्दकोश में किसी भी स्तर पर कागजी रिकॉर्ड पाए जा सकते हैं

मैं एक yaml फ़ाइल को पार्स करने और नेस्टेड मान प्राप्त करने का प्रयास कर रहा हूं जहां आउटपुट है output

sales                      highest_sales
sales.yml/sales1/paper1       Dwight

अब तक, मैं केवल अपने कोड से कुंजी और मूल्य जोड़ी प्राप्त करने में सक्षम हूं लेकिन मैं कहीं भी गया हूं। क्या कोई कृपया एक विचार छोड़ सकता है

यह YAML फ़ाइल से आउटपुट है

{'sales1': {'paper1': {'Jim': 8, 'Pam': 9, 'Dwight': 43}}, 'sales2': {'morning_sales': {'paper2': {'Jim': 10, 'Pam': 23, 'Dwight': 67, 'Michael': 12}}, 'evening_sales': {'paper3': {'Jim': 3, 'Pam': 43, 'Dwight': 67}}}, 'paper4': {'Jim': 23, 'Pam': 14, 'Dwight': 8}}
import yaml

with open(r"C:\Users\Jason\Assignments\Assignment8\sales.yml", 'r') as yamlfile:
        data = yaml.load(yamlfile, Loader=yaml.FullLoader)  


def iterdict(d):
  for k,v in d.items():        
     if isinstance(v, dict):
         iterdict(v)
     else:            
         print (k,":",v)

iterdict(data)

0
Jason Knorman 2 सितंबर 2020, 05:29

1 उत्तर

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

अधिकतम मान की कुंजी operator.itemgetter दस्तावेज़ीकरण का उपयोग करके पाई जा सकती है
आप इस कोड को आजमा सकते हैं, इसे काम करना चाहिए

import yaml
import operator

def check_max(k, v, prev_key):
    try:
        # To get key of maximum sale
        sales = max(v.items(), key=operator.itemgetter(1))[0]
        if 'sales' in sales or 'paper' in sales:
            # To check if value is another dictionary
            raise Exception("value is a dictionary")
        print("{:38s} {:10s}".format(str(prev_key)+'/'+str(k),sales))

    except:
        # The value was a dictionary 
        for k1, v1 in v.items():
            check_max(k1,v1, prev_key+'/'+str(k))


with open(r"C:\Users\Jason\Assignments\Assignment8\sales.yml", 'r') as yamlfile:
        data = yaml.load(yamlfile, Loader=yaml.FullLoader)  

# Formatting of data you can 
# increase the value for proper formatting
print("{:38s} {:10s}".format("sales","highest_sales"))
for k,v in data.items():
    check_max(k,v, 'sales.yml')

आउटपुट:

sales                                  highest_sales
sales.yml/sales1/paper1                Dwight
sales.yml/sales2/morning_sales/paper2  Dwight
sales.yml/sales2/evening_sales/paper3  Dwight
sales.yml/paper4                       Jim
2
Mohnish 2 सितंबर 2020, 09:33