2011-04-03 19 views
5

यह होमवर्क है, इसलिए मुझे जवाब की उम्मीद नहीं है, सिर्फ सही दिशा में एक बिंदु।सूची में एक सूची में है जब सूची का एक तत्व ढूँढना?

{'bike101': ('Road Bike', 
      [('WH139', 2), 
       ('TR102', 2), 
       ('TU177', 2), 
       ('FR101', 1), 
       ('FB101', 1), 
       ('BB101', 1), 
       ('GS101', 1)]), 
'bike201': ('Mountain Bike', 
      [('WH239', 2), 
       ('TR202', 2), 
       ('TU277', 2), 
       ('FR201', 1), 
       ('FB201', 1), 
       ('BB201', 1), 
       ('GS201', 1)]), 
'bike301': ('Racing Bike', 
      [('WH339', 2), 
       ('TR302', 2), 
       ('TU377', 2), 
       ('FR301', 1), 
       ('FB301', 1), 
       ('BB301', 1), 
       ('GS301', 1)])} 

उदाहरण के लिए 'रेसिंग बाइक' उत्पाद नाम है और जोड़े की सूची, (भाग, आवश्यक राशि) है क्रमशः:

अजगर में मैं एक शब्दकोश है कि इतनी तरह है।

मैं एक समारोह है कि, ऊपर शब्दकोश और एक तर्क तो यह और बदले 'कोई नहीं' के लिए महत्वपूर्ण वापस आ जाएगी अगर उत्पाद नाम मौजूद नहीं है के रूप में उत्पाद नाम दिया लिखने के लिए की है।

मैं प्रयोग किया है:

return [key for key, value in product_dict.iteritems() if list(value)[0] == string] 

और जब परीक्षण किया यह सही कुंजी लौटे, लेकिन मैं यह कैसे 'कोई नहीं' वापसी अगर उत्पाद नाम मौजूद नहीं है बनाने के लिए और पता नहीं है मैं अगर यकीन नहीं है ऐसा करने का यह सबसे अच्छा तरीका है। '

मैं केवल अजगर में builtin कार्यों का उपयोग कर सकते हैं, किसी भी मदद बहुत सराहना कर रहा है!

उत्तर

2

आप संकेत के लिए पूछ रहे हैं के बाद से, मैं काम करने वाले कोड पोस्ट नहीं होगा।

आपका कोड एक सूची समझ है, इसलिए यह एक सूची आउटपुट। यदि कोई परिणाम नहीं है, तो सूची खाली होगी। आप एक चर करने के लिए सूची बाध्य कर सकते हैं, len() का उपयोग इसकी लंबाई की जाँच करने और वापसी None अगर यह 0.

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद, बहुत ही सरल लेकिन सुरुचिपूर्ण समाधान! – Sean

2

है का उपयोग करते हुए एक सूची समझ शायद सबसे स्पष्ट तरीका यहां नहीं है, क्योंकि आप एक सूची निर्माण नहीं कर रहे हैं, लेकिन के लिए खोज एक ही वस्तु आपका कोड कुंजी वापस नहीं कर रहा है लेकिन यदि कुंजी मिलती है या आकार 0 की सूची है तो आकार 1 की एक सूची मौजूद नहीं है।

अपनी लाभ के लिए इसका उपयोग करने का एक तरीका है अपनी सूची समझ के पहले तत्व ([0]) तक पहुंचना। यदि सूची खाली है तो आपको IndexError मिल जाएगा। एक try/except साथ सूची समझ के चारों ओर और None वापसी अगर IndexError उठाया जाता है।

1

एक सूची समझ एक सूची बनाने के लिए है, आप वास्तव में यहां क्या चाहते हैं डेटा ढूंढना है। यह तुरंत एक शब्दकोश का सुझाव देता है, लेकिन इस स्थिति में सबसे आसान तरीका डेटा पर चलने के लिए लूप का उपयोग करना होगा, और उत्पाद के नाम से मिलान करने का प्रयास करना होगा।

आप लुकअप अक्सर इस प्रकार की (मैं समझता हूँ कि इस होमवर्क है, लेकिन मान लीजिए कि आप काम के लिए इस लिख रहे थे ढोंग करते हैं), तो यह एक नया शब्दकोश है कि उत्पाद से keyed है बनाने के लिए बेहतर होगा करने के लिए की जरूरत है सीधे नाम। मैं आपको लगता है कि समाधान है, जो संभावित समाधान अपना होमवर्क के लिए आवश्यक नहीं है दिखाएंगे, लेकिन शायद आप पता लगा सकते हैं कि कैसे छोरों का उपयोग कर सरल समाधान के लिए यह अनुकूल करने के लिए:

# Restructure the dictionary 
def invert_dictionary(input): 
    out={} 
    for bike_number in input.keys():     
     product_name, list_of_parts = input[bike_number] 
     if not out.has_key(product_name): 
      out[product_name]=[]   
     out[product_name].append((bike_number, list_of_parts)) 
    return out 

new_dict = invert_dictionary(d) 
# Returns a list of all bikes that are tagged "Racing Bike" 
print new_dict['Racing Bike'] 

आउटपुट:

[('bike301', [('WH339', 2), ('TR302', 2), ('TU377', 2), ('FR301', 1), ('FB301', 1), ('BB301', 1), ('GS301', 1)])] 

अध्ययन करें कि इस कोड में लूप डेटा पर कैसे चलते हैं। आपको मूल निर्देश पर आवश्यक डेटा को ढूंढने के लिए कुछ ऐसा करने की आवश्यकता होगी।

0

एक पंक्ति में:

product_dict2 = {('bike301','Racing Bike'):[('WH339', 2),('TR302', 2), 
              ('TU377', 2),('FR301', 1), 
              ('FB301', 1),('BB301', 1), 
              ('GS301', 1) 
              ], 
       ('bike201','Mountain Bike'):[('WH239', 2),('TR202', 2), 
               ('TU277', 2),('FR201', 1), 
               ('FB201', 1),('BB201', 1), 
               ('GS201', 1) 
               ], 
       ('bike101','Road Bike'):[('WH139', 2),('TR102', 2), 
              ('TU177', 2),('FR101', 1), 
              ('FB101', 1),('BB101', 1), 
              ('GS101', 1) 
              ] 
       } 

:

product_dict = {'bike301': ('Racing Bike', [('WH339', 2),('TR302', 2), 
              ('TU377', 2),('FR301', 1), 
              ('FB301', 1),('BB301', 1), 
              ('GS301', 1) 
              ] 
          ), 
       'bike201': ('Mountain Bike', [('WH239', 2),('TR202', 2), 
               ('TU277', 2),('FR201', 1), 
               ('FB201', 1),('BB201', 1), 
               ('GS201', 1) 
               ] 
          ), 
       'bike101': ('Road Bike', [('WH139', 2),('TR102', 2), 
              ('TU177', 2),('FR101', 1), 
              ('FB101', 1),('BB101', 1), 
              ('GS101', 1) 
              ] 
          ) 
       } 


print dict((string,k) for k,(name,li) in product_dict.iteritems() if name==string).get(string,None) 

मैं प्रपत्र number:(name,a_list)

मुझे लगता है कि इसे परिभाषित करने की बेहतर होना चाहिए के तहत अपने शब्दकोश की आइटम नहीं हैं करने के लिए कोई फायदा नहीं दिखता फिर आपकी ज़रूरत के लिए, आप लिखेंगे:

print dict((string,numb) for numb,name in product_dict2.iterkeys() if name==string).get(string,None) 
संबंधित मुद्दे