我有一个小样本数据集:
select STUFF( (SELECT N',' + cast( id as nvarchar)
from TableX
FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')
我用pandas读了这个并将这两列转换成一个字典,其中'ID'是键,'CD'是值:
import pandas as pd
df = {'ID': ['H576','H577','H578','H600', 'H700'],
'CD': ['AAAAAAA', 'BBBBB', 'CCCCCC','DDDDDD', 'EEEEEEE']}
df = pd.DataFrame(df)
因为我需要做其他事情(我不会详细介绍,这是一个很长的故事,我的实际脚本是长脚本,涉及许多其他事情),我需要将字典保存为值键对,反转:
dictionary = df.set_index('ID')['CD'].to_dict()
稍后在我的较大脚本中,我需要在给出“CD”值时获取“ID”
reversedic = dict()
for key, val in dictionary.items():
reversedic.pop(val, key) #python 2.7 uses dic.append() but for the python I have which is 3.5, 'dict' object has no attribute 'append', so is pop the correct code?
这应该已经返回H576但它返回'none'而不是。
答案 0 :(得分:3)
为什么不直接:
reverseDict = {v:k for k,v in dictionary.iteritems()}
In [14]: reverseDict['AAAAAAA']
Out[14]: 'H576'
答案 1 :(得分:2)
关于dict.pop()的文档:
pop(键[,默认])
如果key在字典中,则将其删除并返回其值,否则返回default。如果没有给出default并且key不在字典中,则引发KeyError。
如果要将键值对添加到词典中,请使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="xeniasis.mymarket.MainActivity">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal"
android:weightSum="4">
<LinearLayout
android:id="@+id/categories_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingRight="20dp">
<ExpandableListView
android:id="@+id/categories_listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<FrameLayout
android:id="@+id/mainPane"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"/>
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_margin="8dp"
android:clickable="true"
android:elevation="5dp"
android:src="@android:drawable/ic_menu_search" />
</FrameLayout>
</LinearLayout>
答案 2 :(得分:2)
center
返回传递给它的pop()
的值。第二个参数是默认值,如果字典中不存在key
,则返回该值。
你可以这样做:
key
答案 3 :(得分:1)
自从以这种方式创建第一个Dict
dictionary = df.set_index('ID')['CD'].to_dict()
为什么不呢?
reversedic = df.set_index('CD')['ID'].to_dict()
然后:
z = reversedic.get('AAAAAAA')
print(z)
或
z = reversedic['AAAAAAA']
print(z)