当应该有值python时,dictionary返回none

时间:2016-06-03 20:06:37

标签: python dictionary pandas

我有一个小样本数据集:

  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'而不是。

4 个答案:

答案 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)