यदि एक mydict कोई खाली नहीं है, तो मैं एक मनमाना तत्व का उपयोग करता हूं:
mydict[mydict.keys()[0]]
क्या ऐसा करने का कोई बेहतर तरीका है?
list(mydict.keys())[0]:।
यदि एक mydict कोई खाली नहीं है, तो मैं एक मनमाना तत्व का उपयोग करता हूं:
mydict[mydict.keys()[0]]
क्या ऐसा करने का कोई बेहतर तरीका है?
list(mydict.keys())[0]:।
जवाबों:
पायथन 3 पर, गैर-विनाशकारी और पुनरावृत्त:
next(iter(mydict.values()))
पायथन 2 पर, गैर-विनाशकारी और पुनरावृत्त:
mydict.itervalues().next()
यदि आप चाहते हैं कि यह पायथन 2 और 3 दोनों में काम करे, तो आप sixपैकेज का उपयोग कर सकते हैं :
six.next(six.itervalues(mydict))
हालांकि इस बिंदु पर यह काफी गूढ़ है और मैं आपके कोड को पसंद करूंगा।
यदि आप किसी आइटम को हटाना चाहते हैं, तो करें:
key, value = mydict.popitem()
ध्यान दें कि "पहले" यहाँ एक उपयुक्त शब्द नहीं हो सकता है क्योंकि dictपायथन <3.6 में एक आदेशित प्रकार नहीं है। अजगर 3.6+ dictsका आदेश दिया गया है।
dict.iterkeys().next()?
dict.values().__iter__().__next__():)
key, value = dict(d).popitem()
यदि आपको केवल एक तत्व का उपयोग करने की आवश्यकता है (संयोग से पहला होने के बाद से, जब से dicts आदेश देने की गारंटी नहीं देते हैं) आप केवल पायथन 2 में ऐसा कर सकते हैं :
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) tuple of "first" element
कृपया ध्यान दें कि (मेरी जानकारी के अनुसार) पायथन इस बात की गारंटी नहीं देता है कि इनमें से किसी भी विधि के लिए 2 क्रमिक कॉल समान क्रम के साथ सूची में वापस आएंगे। यह पायथन 3 के साथ समर्थित नहीं है।
में अजगर 3 :
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) tuple of "first" element
list(my_dict.keys())[0]
list(my_dict.keys())[0]आलसी नहीं है?
अजगर 3 में, जिस तरह से:
dict.keys()
प्रकार में एक मान लौटाएँ: dict_keys (), हमें एक त्रुटि मिली जब इस तरह से तानाशाही की चाबियाँ के 1 सदस्य मिले:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
अंत में, मैं @ 1 को सूचीबद्ध करने के लिए dict.keys () को परिवर्तित करता हूं, और सूची ब्याह विधि द्वारा 1 सदस्य मिला:
list(dict.keys())[0]
list(dict.values())[0]।
जैसा कि दूसरों ने उल्लेख किया है, कोई "पहला आइटम" नहीं है, क्योंकि शब्दकोशों में कोई गारंटीकृत आदेश नहीं है (वे हैश टेबल के रूप में लागू किए गए हैं)। यदि आप चाहते हैं, उदाहरण के लिए, सबसे छोटी कुंजी के अनुरूप मूल्य, thedict[min(thedict)]ऐसा करेगा। यदि आप उस क्रम की परवाह करते हैं जिसमें कुंजियाँ डाली गई थीं, अर्थात, "पहले" से आपका मतलब "जल्द से जल्द डाला गया" है, तो पायथन 3.1 में आप संग्रह का उपयोग कर सकते हैं। क्रमबद्ध करें , जो कि आगामी पायथन 2.7 में भी है; पाइथन के पुराने संस्करणों के लिए, ऑर्डर किए गए ताना-बाना (2.4 और बाद के) को डाउनलोड, इंस्टॉल, और उपयोग करें जो आप यहां पा सकते हैं ।
पायथन 3.7 अब डाइक्ट्स को आर्डर किया जाता है।
इस बारे में कैसा है। यहाँ अभी तक उल्लेख नहीं किया गया है।
py 2 और 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
dict.values()एक दृश्य देता है, इसलिए O (1) होना चाहिए। list(a)एक नई सूची देता है, इसलिए O (n) होगा।
आस-पास के आदेशों की उपेक्षा करना, यह बेहतर हो सकता है:
next(dict.itervalues())
इस तरह हम आइटम लुकअप से बचते हैं और उन कुंजियों की सूची बनाते हैं जिनका हम उपयोग नहीं करते हैं।
next(iter(dict.values()))
next(iter(dict.values()))सूची बनाए बिना एक ही परिणाम प्राप्त करने की आवश्यकता है।
अजगर 3 में
list(dict.values())[0]
आप हमेशा ऐसा कर सकते हैं:
for k in sorted(d.keys()):
print d[k]
यह आपको एक निरंतर क्रमबद्धता देगा ( बिलिन के संबंध में आप अगर छंटाई आप के लिए किसी भी अर्थ नहीं है पर संसाधित कर सकते हैं चाबियों का () मुझे लगता है कि .hash) सेट। उदाहरण के लिए संख्यात्मक प्रकारों को लगातार क्रमबद्ध किया जाता है भले ही आप शब्दकोश का विस्तार करें।
उदाहरण
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'apple pie'
print d.keys()
print sorted(d.keys())
ध्यान दें कि जब छपा हो तो शब्दकोष को क्रमबद्ध किया गया हो। लेकिन मुख्य सेट अनिवार्य रूप से एक हैशमप है!
अजगर 2 और 3 दोनों के लिए:
import six
six.next(six.itervalues(d))
Is there any better way to do this?संक्षिप्त तरीके से प्रश्न का उत्तर देता है।
first_key, *rest_keys = mydict
कोई बाहरी पुस्तकालय नहीं, दोनों पायथन 2.7 और 3.x पर काम करता है:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
अयोग्य कुंजी के लिए बस बाहर छोड़ दें।
>>> list(set({"a":1, "b": 2}))[0]
'a'
उपवर्ग dictएक विधि है, हालांकि कुशल नहीं है। यदि आप पूर्णांक की आपूर्ति करते हैं तो यह वापस आ जाएगी d[list(d)[n]], अन्यथा अपेक्षित रूप से शब्दकोश का उपयोग करें:
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'