附加到字典的键是否因python machine / env而异

时间:2017-10-11 20:51:48

标签: python dictionary jupyter-notebook

我最近开始练习Codefights,它应该是在线面试问题的一个很好的练习空间。

问题是,这是我在python中的解决方案,用于查找字符串中第一个非重复字符的简单问题:

def firstNotRepeatingCharacter(s):
    d = dict()
    for i in range(len(s)):
        key = s[i]
        print d
        if key in d:
            d[key] += 1
        else:
            d[key] = 1
    found = '_'
    for key in d:
        if d[key] == 1:
            found = key
            break
    return found

当我在我的本地jupyter笔记本上运行时,给出了以下输出:

firstNotRepeatingCharacter('abacabad')   

{}
{'a': 1}
{'a': 1, 'b': 1}
{'a': 2, 'b': 1}
{'a': 2, 'b': 1, 'c': 1}
{'a': 3, 'b': 1, 'c': 1}
{'a': 3, 'b': 2, 'c': 1}
{'a': 4, 'b': 2, 'c': 1}
Out[89]:
'c'

哪个太棒了。这就是答案。

但是在codefights env上运行相同的操作会出错: code fights output gives **'d'** because it gets added to the dictionary before.

所以我的问题是,我是一个python noob,在字典中追加它是否为随机位置添加键还是有序的? 或者输出差异是因为jupyter noteboook和他们的在线编译器的python env有些不同。

2 个答案:

答案 0 :(得分:0)

它没有按顺序存储。您可以尝试使用OrderedDict https://docs.python.org/3/library/collections.html#collections.OrderedDict

答案 1 :(得分:0)

您可以使用collections.Counter计算字符出现次数。

由于dictionary have no order中的键,您需要遍历字符串:

import collections


def first_singleton(s):
    counter = collections.Counter(s)
    for c in s:
        if counter[c] == 1:
            return c
    return None

print(first_singleton('abacabad'))