it-swarm.dev

Python Iterate Dictionary by Index

أريد أن أكرر من خلال قاموس في python حسب رقم الفهرس.

مثال:

 dict = {'Apple':'red','mango':'green','orange':'orange'}

أريد التكرار من خلال القاموس من الأول إلى الأخير ، حتى أستطيع الوصول إلى عناصر القاموس بواسطة فهارسهم. على سبيل المثال ، سيكون العنصر الأول Apple ، وسيكون العنصر الثاني هو المانجو وستكون القيمة خضراء.

شيء من هذا القبيل:

for i in range(0,len(dict)):
    dict.i
33
Dev.K.

يمكنك التكرار على المفاتيح والحصول على القيم بالمفاتيح:

for key in dict.iterkeys():
    print key, dict[key]

يمكنك التكرار على المفاتيح والقيم المقابلة:

for key, value in dict.iteritems():
    print key, value

يمكنك استخدام enumerate إذا كنت تريد الفهارس (تذكر أن القواميس ليس لديها طلب):

>>> for index, key in enumerate(dict):
...     print index, key
... 
0 orange
1 mango
2 Apple
>>> 
77
alecxe

هناك بعض الإجابات الجيدة هنا. أود إضافة ما يلي هنا أيضًا:

some_dict = {
    "foo": "bar",
    "lorem": "ipsum"
}

for index, (key, value) in enumerate(some_dict.items()):
    print(index, key, value)

النتائج في

0 foo bar
1 lorem ipsum

يظهر للعمل مع Python 2.7 و 3.5

21
Serguei Fedorov

أردت أن أعرف (idx ، المفتاح ، القيمة) لـ python OrderedDict اليوم (تعيين وحدات SKU في الكميات حسب ترتيب ظهورها في إيصال). كانت الإجابات هنا جميع المشكلين .

في python 3 ، على الأقل ، تعمل هذه الطريقة وتصبح منطقية.

In [1]: from collections import OrderedDict
   ...: od = OrderedDict()
   ...: od['a']='spam'
   ...: od['b']='ham'
   ...: od['c']='eggs'
   ...: 
   ...: for i,(k,v) in enumerate(od.items()):
   ...:    print('%d,%s,%s'%(i,k,v))
   ...: 
0,a,spam
1,b,ham
2,c,eggs
2
untitled90

بما أنك تريد التكرار بالترتيب ، يمكنك استخدام sorted:

for k, v in sorted(dict.items()):
    print k,v
1
jh314

افعل هذا:

for i in dict.keys():
  dict[i]
0
Mark Nenadov

هناك عدة طرق للاتصال بـ for-loop في python وهنا ما وجدته حتى الآن:

A = [1,2,3,4]
B = {"col1": [1,2,3],"col2":[4,5,6]}

# Forms of for loop in python:
# Forms with a list-form,
for item in A:
    print(item)
print("-----------")
  for item in B.keys():
    print(item)
print("-----------")
  for item in B.values():
    print(item)
print("-----------")
  for item in B.items():
    print(item)
    print("The value of keys is {} and the value of list of a key is {}".format(item[0],item[1]))
print("-----------")

النتائج هي:

1
2
3
4
-----------
col1
col2
-----------
[1, 2, 3]
[4, 5, 6]
-----------
('col1', [1, 2, 3])
The value of keys is col1 and the value of list of a key is [1, 2, 3]
('col2', [4, 5, 6])
The value of keys is col2 and the value of list of a key is [4, 5, 6]
-----------
0
Dr Neo

بعض التعليقات محقة في قولها إن هذه الإجابات لا تتوافق مع السؤال.

أحد الأسباب التي قد يرغب المرء في تنفيذ قاموس باستخدام "فهارس" هو على سبيل المثال حساب مصفوفة مسافة لمجموعة من الكائنات في القاموس. لوضعها كمثال (الانتقال قليلاً إلى الأساسيات الموجودة في الرمز النقطي أدناه):

  • بافتراض وجود 1000 كائن في القاموس ، تأخذ مصفوفة المسافة المربعة في الاعتبار جميع المجموعات من كائن واحد إلى أي شيء آخر ، وبالتالي سيكون لها أبعاد 1000 × 1000 عنصر. ولكن إذا كانت المسافة من الكائن 1 إلى الكائن 2 هي نفسها من الكائن 2 إلى الكائن 1 ، فيجب احتساب المسافة فقط إلى أقل من نصف المصفوفة المربعة ، حيث سيكون للقطر مسافة 0 وتعكس القيم أعلاه وتحت قطري.

هذا هو السبب في أن معظم الحزم تستخدم مصفوفة مسافة مكثفة ( كيف تعمل مصفوفة المسافة المختصرة؟ (pdist) )

لكن ضع في اعتبارك أن الحالة الأولى تنفذ حساب مصفوفة المسافة ، أو أي نوع من التقليب من هذا النوع. في هذه الحالة ، تحتاج إلى تخطي النتائج من أكثر من نصف الحالات. هذا يعني أن حلقة FOR التي تعمل من خلال كل القاموس هي مجرد ضرب IF والانتقال إلى التكرار التالي دون القيام بأي مهمة في معظم الأوقات. بالنسبة إلى مجموعات البيانات الكبيرة ، تضيف "IFs" والحلقات الإضافية هذه مبلغًا مناسبًا في وقت المعالجة ويمكن تجنبها في حالة بدء تشغيل "فهرس" واحد في القاموس في كل حلقة.

بالانتقال إلى السؤال ، استنتاجي الآن هو أن الإجابة هي لا. ليس لدى أي شخص طريقة للوصول مباشرة إلى قيم القاموس بأي فهرس باستثناء المفتاح أو التكرار.

أدرك أن معظم الإجابات حتى الآن تطبق طرقًا مختلفة لتنفيذ هذه المهمة ولكن لا تسمح في الواقع بأي تلاعب في الفهرس ، وهذا سيكون مفيدًا في مثل الحالة الموضحة.

البديل الوحيد الذي أراه هو استخدام قائمة أو متغير آخر كفهرس متسلسل إلى القاموس. من هنا يذهب تطبيق لاستعراض مثل هذه الحالة:

#!/usr/bin/python3

dishes = {'spam': 4.25, 'eggs': 1.50, 'sausage': 1.75, 'bacon': 2.00}
print("Dictionary: {}\n".format(dishes))

key_list = list(dishes.keys())
number_of_items = len(key_list)

condensed_matrix = [0]*int(round(((number_of_items**2)-number_of_items)/2,0))
c_m_index = 0

for first_index in range(0,number_of_items):
    for second_index in range(first_index+1,number_of_items):
        condensed_matrix[c_m_index] = dishes[key_list[first_index]] - dishes[key_list[second_index]]
        print("{}. {}-{} = {}".format(c_m_index,key_list[first_index],key_list[second_index],condensed_matrix[c_m_index]))
        c_m_index+=1

الإخراج هو:

Dictionary: {'spam': 4.25, 'eggs': 1.5, 'sausage': 1.75, 'bacon': 2.0}

0. spam-eggs = 2.75
1. spam-sausage = 2.5
2. spam-bacon = 2.25
3. eggs-sausage = -0.25
4. eggs-bacon = -0.5
5. sausage-bacon = -0.25

من الجدير بالذكر أيضًا أن هذه الحزم مثل intertools تسمح للمرء بأداء مهام مماثلة بتنسيق أقصر.

0
Fábio Lobão