字典操作...索引/迭代/验证

时间:2009-11-04 15:49:43

标签: python dictionary

我想:

  • 检查位置i的键/值
  • 检查键/值是否包含字符串
  • 在另一个变量中删除/存储键/值

此Java代码的等效项:

//Some list...
ArrayList<String> example;
...
//Index into data structure
example.get(i);
//Check for some string...
if (example.get(i).contains("someText")){

    somestuff;

}
//Store in some other variable
exam = example.get(i)

这就是我在Java中有效尝试的内容,但是我希望能够使用Python dictionarties做到这一点但是我不确定这是否可行,因为我发现Python文档很难阅读。

4 个答案:

答案 0 :(得分:4)

Python字典作为哈希表实现,因此没有内部排序;因此,“位置i”对于一个字典来说是一个完全荒谬的概念 - 它就像要求最黄色的dict条目,或者最不像骆驼的那些......这些概念不适用于dict条目,并且“位置我“完全不适用。”

i来自何处,即您尝试解决的真正的问题是什么?如果您的要求是遍历字典,那么您可以直接执行该操作,而无需使用“数字索引”。或者,如果您确实需要保留某些特定的顺序或其他,那么您不使用dict,而是使用一些不同的数据结构。如果你确切地解释了你想要解决的目的,我相信我们可以帮助你。

答案 1 :(得分:2)

直接翻译(对于ArrayList<String>,你不需要字典,你想要一个列表):

example = ["foo", "bar", "baz"]
str = example[i]
if "someText" in str:
    somestuff()

习惯于for关键字,但它在Python中很棒:

for str in example:
    if "someText" in str:
        someStuff()

以下是使用词典的示例:

fruits = {
    "apple": "red",
    "orange": "orange",
    "banana": "yellow",
    "pear": "green"
}

for key in fruits:
    if fruits[key] == "apple":
        print "An apple is my favorite fruit, and it is", fruits[key]
    else:
        print "A", key, "is not my favorite fruit, and it is", fruits[key]

在字典上使用for进行迭代会产生键,您仍然需要为项目本身编制索引。正如亚力克斯指出的那样,我们真的在离线基础上用如此少的信息来回答你,而且听起来你并没有根植于数据结构(每次迭代时字典可能会产生不同的顺序)。

答案 2 :(得分:1)

哟可以这样做,以重现与Java中的示例相同的行为。

# Some list
example = {} # or example = dict()
...
# Index into data estructure.
example[example.keys(i)]
# Check for some string...
if example[example.keys(i)] == 'someText' :
    pass
# Store in some other variable...
exam = example[example.keys(i)]
del example[example.keys(i)]
# ...or
exam = example.pop(example.keys(i))

答案 3 :(得分:0)

Python的优点在于您可以交互式地尝试代码。

因此我们创建了一个list,就像Java List

>>> mylist = ["python","java","ruby"]
>>> mylist
['python', 'java', 'ruby']

我们可以通过索引在列表中输入一个条目:

>>> mylist[0]
'python'

使用find函数搜索子字符串:

>>> mylist[1].find("av")
1
>>> mylist[1].find("ub")
-1

如果找不到字符串,则返回-1。

将条目复制到新变量就完成了您的期望:

>>> newvalue = mylist[2]
>>> newvalue
'ruby'

或者我们可以创建一个dict,它类似于Java Map,按键而不是索引存储,但这些工作与Python中的列表非常相似:

>>> mydict = { 'python':'Guido', 'java':'James', 'ruby':'Yukihiro' }
>>> mydict['java']
'James'
>>> othervalue = mydict['ruby']
>>> othervalue
'Yukihiro'
>>> mydict['python'].find('uid')
1
>>> mydict['python'].find('hiro')
-1
>>> mydict['ruby'].find('hiro')
4