Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在将字典保存到CSV之前忽略某些键、值对_Python_List_Python 2.7_Csv_Dictionary - Fatal编程技术网

Python 在将字典保存到CSV之前忽略某些键、值对

Python 在将字典保存到CSV之前忽略某些键、值对,python,list,python-2.7,csv,dictionary,Python,List,Python 2.7,Csv,Dictionary,我是Python新手(2周),遇到了一个问题。 我有一本不断增长的字典: dict1={"some_large_key1":"value1","some_large_key2":"value2",........,"some_large_key1000":"value1000"} 问题1:我想创建一个csv文件,其中不包括一些键、值对。 -->一种可能的解决方案是创建一个键列表并忽略整个列表 list1=["some_large_key1","some_large_key2","some_la

我是Python新手(2周),遇到了一个问题。
我有一本不断增长的字典:

dict1={"some_large_key1":"value1","some_large_key2":"value2",........,"some_large_key1000":"value1000"}
问题1:我想创建一个csv文件,其中不包括一些键、值对。
-->一种可能的解决方案是创建一个键列表并忽略整个列表

list1=["some_large_key1","some_large_key2","some_large_key3"]
for key,value in dict1:
    if key not in list1:         #something like this
        #do something
    else:
        #do something
问题2:我不想给出这么大的键名,相反,我可以给出:

list1=["key1","key2",...]

这是一个正确的方法,还是我应该考虑其他事情

是的,您可以列出要忽略的键

dict1={"some_large_key1":"value1","some_large_key2":"value2","some_large_key3":"value3"}
ignore_list=['key1', 'key2']
new_dict = {}
for key in dict1:
    if not any(x in key for x in ignore_list):
        key_list=[key]
        value_list=[dict1[key]]
        #make a new dict from above 2 lists  (This will exclude ignore key,value pair)
        for i in range(len(key_list)):
            new_dict[key_list[i]] = value_list[i]
print new_dict
输出:

{'some_new_key3':'value3'}  #Note that key1,key2 is ignored in this output dictionary.  

你的“一些大的键1”和“键1”之间的关系不是很清楚;但是,我认为您可以做如下操作:

original_dict = {
    "some_large_key1": "value1", 
    "some_large_key2": "value2", 
    ......, 
    "some_large_key1000": "value1000"
}
to_ignore = ['key1', 'key2', 'key3', ...]
filtered_dict = {key: value for (key, value) in original_dict.items() if key.rsplit('_', 1)[-1] not in to_ignore}

key.rsplit(“”,1)[-1]
的作用是删除
一些大的前缀;您可以使用将长键名转换为短键名的函数替换此部分。

我建议使用集合而不是列表,因为
中的
运算符在集合中是常量。但是,是的,你肯定需要if语句来过滤掉你不想打印的值。你能详细说明一下你的“some\u large\u key1”和“key1”之间的关系吗?您是否使用一些函数将“some_large_key1”简化为“key1”,或者直接忽略前几个字符?@dazeddluzed:所以我有一个键名:“some_large_key1”。我想通过在忽略列表中传递“key1”来简化它,而不是使用这个更大的名称。因此,在迭代dict时,如果我发现任何包含像“blah_blah_key1”这样的“key1”的键,我将忽略它。对于这个不清楚的问题,很抱歉。这是我在stackoverflow中的第一个问题。我正在努力提高。:)我建议不要使用
范围(len(key_list))
;作为PyCon 2013中的Python核心开发人员Raymond Hettinger,每当您发现自己在集合中操作索引时,您很可能是做错了。@Dazed困惑:感谢您的评论。你的答案清晰易懂。我从你的回答中学到了一些东西。