如果字典中存在密钥,我想知道密钥的位置,即数字索引。例如:
如果字典包含:
{'test':{1,3},'test2':{2},'test3':{2,3}}
if 'test' in dictionary:
print(the index of that key)
例如,输出为0。 (' test3' ...)
的输出为2我目前正在使用字典,我猜测我必须使用有序dict
来执行此操作,但我怎样才能使用有序{{}} { {1}}?
感谢您的帮助。
答案 0 :(得分:8)
对于Python< 3.6,你不能这样做,因为Python中的词典没有订单,因此项目没有索引。你可以使用OrderedDict
库中的collections
来代替它,并传递一个元组元组:
>>> import collections
>>> d = collections.OrderedDict((('test',{1,3}),('test2',{2}),('test3',{2,3})))
>>> d.keys().index('test3') # Replace with list(d.keys()).index("test3") for Python 3
2
答案 1 :(得分:2)
从Python 3.6开始,字典现在preserves the insertion order。因此,使用Python 3.6+,您可以通过将 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.pinchzoom.MainActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_story_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:fontFamily="sans-serif-condensed"
android:gravity="center_horizontal"
android:text="text_story_name"
android:textAllCaps="true"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_author_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="text_author_name"
android:textAlignment="center"
android:textSize="14sp"
android:textStyle="bold|italic" />
<Space
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="#000000"
/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="#000000"
app:srcCompat="?attr/actionModeSplitBackground" />
<TextView
android:id="@+id/text_body_story"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:padding="10dp"
android:text="text_body_story"
android:textColorHighlight="#ffee04"
android:textSize="14sp" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
转换为列表来获取索引。
dict_keys
作为另一个例子,下面演示了如何为一些感兴趣的键找到索引。
dictionary = {'test':{1,3}, 'test2':{2}, 'test3':{2,3}}
if 'test' in dictionary:
print(list(dictionary).index('test'))
此输出将是
key_list = list(dictionary)
keys_of_interest = ['test2', 'test3']
for key in keys_of_interest:
print('key: {}, index: {}'.format(key, key_list.index(key)))
答案 2 :(得分:1)
不幸的是,由于如何在python中构建字典,这样的事情是不可能的。这些数据结构本质上是无序的。
要获得所需的功能,必须使用不同的数据结构,例如OrderedDict
答案 3 :(得分:1)
你可以建立一个索引:
internal
然后ind= {k:i for i,k in enumerate(dictionary.keys())}
将是2,O(1)访问时间。
当键被修复时,这是强大的。如果添加/删除键,则必须重建索引。
答案 4 :(得分:0)
在python 3.6或更高版本中,使用dicts保留插入顺序,那么您可以在一行中完成此操作,如果键不在词典中,则返回“ None”:
key_index = list(my_dictionary).index(the_key) if the_key in my_dictionary else None
答案 5 :(得分:0)
您可以将dict.keys()转换为列表,然后为列表建立索引
keys = list(dictionary.keys()
index = keys.index("test")
索引不在列表中的值将导致ValueError
keys.index("test5")
ValueError: "test5" is not in list