python - 从两个基于键的字典中提取,有时键不在 python 2.7 中的一个字典中

标签 python python-2.7 dictionary

我是 python 的新手,我使用的是 python 2.7。我有两本具有相同键的字典。一本字典总是一样的。另一个可能没有第一个字典中的所有匹配键。我已经根据 Stack overflow 中有关此主题的其他问题尝试了许多变体。

我什至尝试使用以下代码进行测试。不起作用的部分是比较不同词典中的键。 示例词典:

clubDict = {'001':'Alabama','066':'MountainWest','602':'The Auto Club Group'}

data = {'001':6021, ,'066':1134}

如您所见,数据字典中没有键 602。数据字典是从一个 csv 文件中在此代码中构建的,该文件为一个总数添加了多个数字。大部分代码在堆栈溢出中得到了解答。

当我没有 if, elifs 时代码可以工作。然而,打印语句在打印时会给出不同的结果。这是为了在数据{}中丢失键。我添加了一个 if, else 来尝试使用 pass 比较键。还是不会比较。所以我已经尝试了你现在看到的。

这是我的部分代码:

def getTotals():

    result = defaultdict(int)
    regexp = re.compile(r'(?:ttp_ws_sm|ttpv1)_(\d+)_')

    with open(os.path.join(source, 'ttp_13_08.csv'), 'r') as f:
        rows = csv.reader(f)

        #adds total values for each club code (from csv file)
        for row in rows:
            match = regexp.search(row[1])
            if match:
                result[match.group(1)] += int(row[13])
        for key, value in result.items():
            data.update(result.items())

        for value, key in clubDict.items():
            #f = open(output_path + filename, 'a')
            shared_keys = set(clubDict.keys()).union(data.keys())

            if key not in data:
                print "No counts avialable"
            elif key not in clubDict:
                print "Check for Club code"
            elif data[key] == clubDict[key]:
                print 'match'#, '{0}, {1}, {2}'.format(key, value, data[value])
            else:
                print '{0}, {1}, {2}'.format(key, value, data[value])
    file.close

def main():

try:
    getTotals()
except:
    print "No more results"

结果不是我需要的。

这是期望的结果:

Alabama 001 6021

MountainWest 066 1134.

我在堆栈溢出中查看了很多问答,但似乎无法获得这些结果。我可能只是在错误地搜索我的问题。

最佳答案

您在循环中交换了 valuekey:

for value, key in clubDict.items():

.items() 为您提供 (key, value) 元组。

稍微修改您的代码以删除冗余:

def getTotals():
    result = defaultdict(int)
    regexp = re.compile(r'(?:ttp_ws_sm|ttpv1)_(\d+)_')

    with open(os.path.join(source, 'ttp_13_08.csv'), 'r') as f:
        rows = csv.reader(f)

        #adds total values for each club code (from csv file)
        for row in rows:
            match = regexp.search(row[1])
            if match:
                result[match.group(1)] += int(row[13])
        data.update(result)

        for key in clubDict.viewkeys() & data:
            club_value, data_value = clubDict[key], data[key]
            if club_value == data_value:
                print 'match'
            else:
                print '{0}, {1}, {2}'.format(key, club_value, data_value)

您已经计算了两个字典的交集,它只为您提供了两个字典中都存在的键,但您确实需要遍历该交集本身,而不是 clubDict

我用了dict.viewkeys()直接获取类似集合的对象,它可以与另一个可迭代对象(如 data 字典)相交,非常高效,没有中间结果。

关于python - 从两个基于键的字典中提取,有时键不在 python 2.7 中的一个字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181434/

相关文章:

具有多个参数和类型问题的 Haskell 映射

python - 从包含特殊字符(星号、符号、*、&)的 python 字典写入 YAML 文件

python - 字典值缺失

python-2.7 - Windows上的python virtualenv:启动器中的 fatal error :无法使用““创建进程

python - 使用 for 循环的数据帧索引

Python - 列表理解,二维列表

python - Python 中的多态性和构造函数行为

python - Tweepy Google App Engine 计费错误

python-无法使用 Homebrew 安装的模块?

python - 如何枚举文件的特定列