`
zsjg13
  • 浏览: 144989 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Mapping Information with Dictionaries

 
阅读更多

    dictionary是Python唯一内置的 mapping 数据类型。

 

>>> logins = {‘yahoo’:(‘john’,’jyahooohn’), 

...           ‘hotmail’:(‘jrf5’,’18thStreet’)}

>>> logins[‘hotmail’]  # What’s my name/password for hotmail?

(‘jrf5’, ‘18thStreet’)

 

1、Creating and adding to dictionaries

    创建一个dictionary,就是通过在花括号中放 0 个或 多个 键值对。

    键必须是唯一的、immutable,所以字符串、数字、以及元素是 immutable 的 tuples 都可以担任键。而值可以是任何东西。

    添加或替换 mappings 很简单:

>>> logins['slashdot'] = ('juan', 'lemmein')

 

2、Accessing and updaing dictionary mappings

    用一个不存在的 key,Python会抛出 KeyError 异常。当你不想关心处理该异常,那可以用 get(key[, obj])方法,如果映射不不存在的话,它会返回None,当然你可以给它指定一个默认值。

>>> logins[‘sourceforge’,’No such login’]

Traceback (innermost last):

File “<interactive input>”, line 1, in ?

KeyError: (‘sourceforge’, ‘No such login’)

>>> logins.get(‘sourceforge’) == None

1

>>> logins.get(‘sourceforge’,’No such login’)

‘No such login’

    setdefault(key[, obj]) 方法和 get 类似,但如果键值对不存在,它会将它们添加到这个 dictionary中去:

>>> logins.setdefault(‘slashdot’,(‘jimmy’,’punk’))

(‘juan’, ‘lemmein’) # Existing item returned

>>> logins.setdefault(‘justwhispers’,(‘jimmy’,’punk’))

(‘jimmy’, ‘punk’) # New item returned AND added to dictionary

    如果只是想知道一个 dictionary 是否含有某个键值对,那可以用 has_key(key) 方法:

>>> logins.has_key('yahoo')

1

    del 语句会从一个 dictionary 中移除一项:

>>> del logins['yahoo']

>>> logins.has_key('yahoo')

0

 

=====================“Hashability”=========================

对于 dictionary 的键的最确切的要求是它必须 be hashable。对象的 hash 值用于快速比较。考虑比较两个字符串这件事,要判断2个字符串是否相等,需要比较每个字符直到发现一个不相等的字符。

如果你已经有了每个字符串的 hash 值,那只要比较它们的 hash 值就可以了。Python 在进行 dictionary lookup 时,就利用了 hash 值。

==============================================

 

    可以用 update(dict) 将某个 dictionary 中的元素添加到另一个 dictionary中:

>>> z = {}

>>> z[‘slashdot’] = (‘fred’,’fred’)

>>> z.update (logins)

>>> z

{‘justwhispers’: (‘jimmy’, ‘punk’), 

‘slashdot’: (‘juan’, ‘lemmein’), # Duplicate key overwritten

‘hotmail’: (‘jrf5’, ‘18thStreet’)}

 

3、Additional dictionary operations

>>> len(logins) # How many items?

3

>>> logins.keys() # List the keys of the mappings

[‘justwhispers’, ‘slashdot’, ‘hotmail’]

>>> logins.values() # List the other half of the mappings

[(‘jimmy’, ‘punk’), (‘juan’, ‘lemmein’), (‘jrf5’,

‘18thStreet’)]

>>> logins.items() # Both pieces together as tuples

[(‘justwhispers’, (‘jimmy’, ‘punk’)), (‘slashdot’, (‘juan’,

‘lemmein’)), (‘hotmail’, (‘jrf5’, ‘18thStreet’))]

>>> logins.clear() # Delete everything

>>> logins

{}

 

You can destructively iterate through a dictionary by calling its popitem() method,

which removes a random key and its value from the dictionary:

>>> d = {‘one’:1, ‘two’:2, ‘three’:3}

>>> try:

...   while 1:

...     print d.popitem()

... except KeyError: # Raises KeyError when empty

...   pass

(‘one’, 1)

(‘three’, 3)

(‘two’, 2)

 

    popitem是 2.1 版里的。

    Dictionary 对象还提供了 copy() 方法,它创建某个 dictionary 的一个浅拷贝:

>>> a = {1:’one’, 2:’two’, 3:’three’}

>>> b = a.copy()

>>> b

{3: ‘three’, 2: ‘two’, 1: ‘one’}

分享到:
评论

相关推荐

    Disease Mapping with WINBUG and MLwin

    Disease Mapping with WinBUGS and MLwiN provides a practical introduction to the use of software for disease mapping for researchers, practitioners and graduate students from statistics, public health ...

    Building Mapping Applications with QGIS

    Building Mapping Applications with QGIS,QGIS制图应用..................................................................

    Dynamic Parallax Mapping with Soft Shadows.pdf

    ### Dynamic Parallax Occlusion Mapping与近似软阴影技术 #### 概述 本文档主要介绍了在GDC(Game Developers Conference)大会上所展示的一种创新技术——动态视差遮挡映射(Dynamic Parallax Occlusion Mapping...

    Simultaneous Localization and Mapping with Power Network Electromagnetic Field

    本研究提出了一种新颖的方法,即利用建筑物内部电力网络产生的电磁场(EMF)进行同步定位与建图(Simultaneous Localization and Mapping, SLAM)。此技术通过分析电磁场的空间分布特征来实现室内环境下的定位与地图...

    Improved_Techniques_for_Grid_Mapping_With_Rao-Blac.pdf

    标题中提到的“Improved Techniques for Grid Mapping With Rao-Blackwellized Particle Filters”揭示了研究者们关注的核心问题在于如何改进网格地图构建技术,尤其是使用Rao-Blackwellized粒子滤波器的方法。...

    ShadowMapping with GLSL

    Shadow Mapping是一种广泛使用的实时阴影渲染技术,它利用了OpenGL着色语言(GLSL)来实现。本文将深入探讨GLSL中的阴影映射技术,包括基本原理、实现步骤以及常见问题的解决策略。 一、阴影映射基础 阴影映射的...

    Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters.pdf

    本文介绍的论文《Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters》详细探讨了基于 RBPFs 的 SLAM 方法,并提出了一系列创新性的改进措施,旨在提高算法的效率和准确性。这些改进...

    Least Square Conformal Mapping with Spring Energy

    a paper for least square conformal mapping with spring energy

    solidity入门学习——mapping

    一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =&gt;uint) idmapping和mapping(uint =&gt;string) namemapping。idmapping用来表示地址变量和整型变量的对应关系,在注册过程中...

    Mapping co-authorships with BibExcel

    Mapping co-authorships with BibExcel

    Indoor-Mapping-Using-the-VLC-Channel-State-Information-master源码

    标题 "Indoor-Mapping-Using-the-VLC-Channel-State-Information-master源码" 提供的信息表明,这是一个关于室内定位技术的项目,它利用了Visible Light Communication (VLC)的信道状态信息。VLC是一种利用可见光...

    SAP PI Java Mapping com.sap.aii.mapping.api PI MAPPING开发必须jar包

    在SAP Process Integration (PI) 中,Java Mapping是一种强大的工具,用于处理和转换数据流,以确保不同系统间的数据交换准确无误。标题提到的"com.sap.aii.mapping.api PI MAPPING开发必须jar包"是Java Mapping开发...

    The GraphSLAM algorithm with applications to large-scale mapping

    GraphSLAM算法是一种用于解决大规模地图构建问题的统一算法,特别适合离线SLAM(同时定位与地图构建)问题。GraphSLAM将SLAM的后验概率转化为图形网络,代表数据的对数似然性。然后,使用变量消去技术来简化这个图形...

    端口转换软件tcpmapping

    端口转换软件TcpMapping是一款非常实用的工具,主要用于网络中的端口映射或者称为端口转发。在深入了解TcpMapping之前,我们首先需要理解什么是端口和端口转换。 端口在计算机网络中扮演着重要的角色,它们是网络...

    matlab_mapping_toolbox

    《MATLAB Mapping Toolbox详解》 MATLAB Mapping Toolbox是MATLAB软件环境中的一个重要工具箱,专为地球科学、航空航天、地理信息系统(GIS)以及导航领域的研究人员和工程师设计。它提供了丰富的函数和工具,用于...

    藏经阁-Powering Predictive Mapping at Scale with Spark Kafka and El

    藏经阁-Powering Predictive Mapping at Scale with Spark Kafka and El

Global site tag (gtag.js) - Google Analytics