Python 对于一组字典中的所有字典,如何删除字典值中某个字符后的所有内容?

Python 对于一组字典中的所有字典,如何删除字典值中某个字符后的所有内容?,python,parsing,dictionary,Python,Parsing,Dictionary,我的目标是从一组字典中删除值中某个字符后的所有字符 我已从本地计算机导入CSV文件,并使用以下代码打印: import csv with open('C:\Users\xxxxx\Desktop\Aug_raw_Page.csv') as csvfile: reader=csv.DictReader(csvfile) for row in reader: print row 我得到一组目录,看起来像: {Pageviews_Aug':'145', 'URL':'

我的目标是从一组字典中删除值中某个字符后的所有字符

我已从本地计算机导入CSV文件,并使用以下代码打印:

import csv
with open('C:\Users\xxxxx\Desktop\Aug_raw_Page.csv') as csvfile:
    reader=csv.DictReader(csvfile)
    for row in reader:
        print row
我得到一组目录,看起来像:

{Pageviews_Aug':'145', 'URL':'http://www.domain.com/#fbid=12345'}
对于包含带有
#fbid
的值的任何目录,我将尝试删除
#fbid
及其后的所有字符-对于所有这样的目录

我试过:

for key,value in row.items():
       if key == 'URL' and '#' in value or 'fbid' in value
            value.split('#')[0]
            print row
没用


不要认为
rsplit
会起作用,因为它只删除空格。

我想到的最快的方法是使用
rsplit()


好吧,我猜你的问题不在于删除
后面的文本,而在于获取该字符串

什么是“行”? 我猜这是一个只有一个“URL”键的词汇表,我错了吗

 for key,value in row.items():
     if key == 'URL' and '#fbid' in value:
        print value.split('#')[0]

我不太了解你数据的全部格式。 如果要编辑字典中的单个变量,则不必遍历所有项目:

if 'URL' in row.keys():
    if '#fbid' in row['URL']:
         row['URL'] = row['URL'].rsplit('#fbid')[0]
这应该行得通。
但我真的认为您应该复制整个数据的一个示例(三项就足够了)

使用正则表达式:

>>> import re
>>> value = 'http://www.domain.com/#fbid=12345'
>>> re.sub(ur'#fbid.*','',value)
'http://www.domain.com/'
>>> value = 'http://www.domain.com/'
>>> re.sub(ur'#fbid.*','',value)
'http://www.domain.com/'

对于您的代码,您可以这样做,以获得与以前相同格式的答案:

import csv
with open('C:\Users\xxxxx\Desktop\Aug_raw_Page.csv') as csvfile:
    reader=csv.DictReader(csvfile)
    for row in reader:
        row['URL'] = re.sub(ur'#fbid.*','',row['URL'])
        print row

给定示例代码,在您看来它不起作用,因为您没有保存
value.split(“#”)[0]
的结果,请执行以下操作

for key,value in row.items():
    if key == 'URL' and '#' in value or 'fbid' in value
        new_value = value.split('#')[0]  # <-- here save the result of split in new_value
        row[key] = new_value             # <-- here update the dict row
 print row                               # instead of print each time, print it once at the end of the operation
因为它只检查一把钥匙

范例

>>> row={'Pageviews_Aug':'145', 'URL':'http://www.domain.com/#fbid=12345'}
>>> if "#fbid" in row["URL"]:
        row["URL"] = row['URL'].split("#fbid")[0]


>>> row
{'Pageviews_Aug': '145', 'URL': 'http://www.domain.com/'}
>>> 

你说的
split
rsplit
不起作用。为什么?你能举个简单的例子吗?你知道。*表示任何数量的人都认为这是有效的!我需要更好地使用正则表达式。谢谢你,是的。我相信罗就是字典。这本字典有10个键。在上面的例子中,我只是显示了URL和页面浏览量。我运行上面的程序,只得到if语句中规定的值。需要恢复所有原始目录,仅删除所有过去的#fbid。谢谢你的帮助。运行这个,我得到了一个需要返回的数字的字典。我肯定这是我的问题——只是不确定是什么问题。你想要回字典,对吗?只有条目
URL
被修改
if '#fbid' in row['URL']:
    row['URL'] = row['URL'].split('#fbid')[0]
>>> row={'Pageviews_Aug':'145', 'URL':'http://www.domain.com/#fbid=12345'}
>>> if "#fbid" in row["URL"]:
        row["URL"] = row['URL'].split("#fbid")[0]


>>> row
{'Pageviews_Aug': '145', 'URL': 'http://www.domain.com/'}
>>>