我有以下Python 2.7字典数据结构(我不控制源数据 - 来自另一个系统):
{112762853378:
{'dst': ['10.121.4.136'],
'src': ['1.2.3.4'],
'alias': ['www.example.com']
},
112762853385:
{'dst': ['10.121.4.136'],
'src': ['1.2.3.4'],
'alias': ['www.example.com']
},
112760496444:
{'dst': ['10.121.4.136'],
'src': ['1.2.3.4']
},
112760496502:
{'dst': ['10.122.195.34'],
'src': ['4.3.2.1']
},
112765083670: ...
}
字典键将始终是唯一的.Dst,src和别名可以是重复的.所有记录都将始终具有dst和src,但并非每条记录都必须具有第三条记录中显示的别名.
在样本数据中,前两个记录中的任何一个都将被删除(对我来说无关紧要).第三条记录将被认为是唯一的,因为虽然dst和src是相同的,但它缺少别名.
我的目标是删除所有重复dst,src和别名的记录 - 无论密钥是什么.
这个菜鸟怎么做到这一点?
另外,我对Python的有限理解将数据结构解释为字典,其值存储在字典中...这是一个dicts的字典,这是正确的吗?
我有一个CSV,第一行包含字段名称.示例数据是......
"Make","Model","Note"
"Chevy","1500","loaded"
"Chevy","2500",""
"Chevy","","loaded"
Run Code Online (Sandbox Code Playgroud)
我需要在键值对数组中格式化我的数据,其中键名是列标题.我猜对于第1行它会是这样的:
$array = [
"Make" => "Chevy",
"Model" => "1500",
"Note" => "loaded"
];
Run Code Online (Sandbox Code Playgroud)
......排2 ...
$array = [
"Make" => "Chevy",
"Model" => "1500",
"Note" => ""
];
Run Code Online (Sandbox Code Playgroud)
......和第3行......
$array = [
"Make" => "Chevy",
"Model" => "",
"Note" => "loaded"
];
Run Code Online (Sandbox Code Playgroud)
我不确定除了静态之外该怎么做 - 问题是带有相关数据的列可能会从一个文件更改为下一个...重新排列,删除或添加的列.
你的想法非常感谢.
我使用的Postgres 8.4.4复制,http://www.postgresql.org/docs/8.4/static/sql-copy.html,导入CSV数据到我的数据库.我的源数据中的一些值包含双引号,这些双引号在插入时被剥离,而当我通过psql执行INSERT或UPDATE语句以测试双引号时会保留.也许给出一个关于发生了什么的线索,一些值也包含逗号,这些逗号根据需要保留.
我试图在http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html中解决基于信息的问题,但没有成功.
我正在使用的复制命令是:
copy my_table (field_1, field_2, field_3 ...) from '/tmp/source.csv' with csv
Run Code Online (Sandbox Code Playgroud)
源数据使用逗号分隔符双引号.如有必要,可以更改...
"价值","另一个价值","这是"另一个"价值","不再,谢谢"
我有一个包含IP地址和DNS名称的字符串列表,我希望删除以"10"开头的值.只要.样本数据如下:
['www.example.com','1.2.3.4','4.3.2.1','example.net','10.1.1.10','10.1.1.11',...]
我认为这很简单,并从以下开始:
for v in address:
test = re.match('(^\d+\.)',v)
if test:
if test.group(1) == '10.':
address.remove(v)
Run Code Online (Sandbox Code Playgroud)
"10" 虽然我没有收到任何错误,但是没有删除地址(并且使用"print address.remove(v)"进行了一些t-shooting,导致每个"10."地址都为"无".让我相信正则表达式是错了但似乎除了这个能力之外还有效.
所以我用re.purge()戳了一下 - 这也没有帮助,但不认为这是我问题的一个因素.我也尝试使用del地址[...]无济于事.
我哪里出错了?
非常感谢您的关注.
样本数据:
{
10116079620: {'ip.dst': ['10.1.1.5'], 'ip.src': ['1.2.3.4'], 'category': ['Misc']},
10116882439: {'ip.dst': ['1.2.3.4'], 'ip.src': ['10.1.1.5'], 'category': ['Misc']},
10116080136: {'ip.dst': ['10.10.10.99'], 'ip.src': ['1.2.3.4'], 'category': ['Misc']},
10116884490: {'ip.dst': ['10.10.10.99'], 'ip.src': ['2.3.4.5'], 'alias': ['www.example.com'], 'category': ['Misc']},
10117039635: {'ip.dst': ['2.3.4.5'], 'ip.src': ['10.11.11.50'], 'alias': ['google.com'], 'category': ['Misc']},
10118099993: {'ip.dst': ['1.2.3.4'], 'ip.src': ['10.11.11.49'], 'alias': ['www.google.com'], 'category': ['Misc']},
10118083243: {'ip.dst': ['10.11.11.49'], 'ip.src': ['4.3.2.1'], 'alias': ['www.google.com'], 'category': ['Misc']}}
}
Run Code Online (Sandbox Code Playgroud)
目标:
我的目标是使用已知存在的值(IP地址)搜索示例字典,尽管不知道它是否会出现在ip.dst或ip.src中.一旦找到,我想将"对面"(其他)IP地址写入新列表...如果在ip.src中找到搜索到的地址,我想捕获ip.dst,反之亦然.
可以多次找到搜索到的地址 - 结果列表不需要反映重复项.
如果搜索到1.2.3.4,则会捕获以下内容:
*10.1.1.5
*10.10.10.99
*10.11.11.49
搜索10.10.10.99将捕获:
*1.2.3.4
*2.3.4.5
我确信这很简单,但我遇到了令人讨厌的嵌套循环,需要一个比我的泥更清晰的简洁程序.
非常感谢您的协助.
谢谢.
我有一个定义的函数,它包含一个return语句但没有返回值.我的代码如下:
def seed(addy):
# urllib2 stuff is here
seed_result = re.search('<td>Results 1 - \d+ of (\d+)',seed_query) # searches for '<td>Results 1 - x of y', captures 'y'
seed_result = seed_result.group(1) # this is 'y' from above
# there's a call to a different function here which works properly
# other stuff going on here pertaining to addy but seed_result still has my string
# now I want to return the seed_result string...
return seed_result
# ... some code outside of …Run Code Online (Sandbox Code Playgroud) python ×4
csv ×2
dictionary ×2
arrays ×1
copy ×1
duplicates ×1
function ×1
heading ×1
import ×1
list ×1
php ×1
postgresql ×1
return ×1
search ×1