a = [['a', 'b'], ['b'], ['b', 'a']]
Run Code Online (Sandbox Code Playgroud)
因为第一个和第三个元素是相同的,如果将它们转换为集合,我想对列表 'a' 进行排序,以便具有相同集合值的任何两个元素彼此相邻。对于上面的示例,排序结果将是:
a = [['a', 'b'], ['b', 'a'], ['b']]
Run Code Online (Sandbox Code Playgroud)
或者
a = [['b'], ['a', 'b'], ['b', 'a']]
Run Code Online (Sandbox Code Playgroud) 我一直使用“utf8”来读取文件:
with open(filename, 'r', encoding='utf8') as f, open(filename2, 'r', encoding='utf8') as f2:
for line in f:
line = line.strip()
columns = line.split(' ')
for line in f2:
line = line.strip()
columns = line.split(' ')
Run Code Online (Sandbox Code Playgroud)
然而,上面的代码在 for 'f2' 行引入了额外的 '\ufeff' 代码:
columns = line.split(' ')
Run Code Online (Sandbox Code Playgroud)
现在 columns[0] 包含这个字符,而 'line' 没有这个字符。这是为什么?然后我切换到“utf-8-sig”,问题就消失了。
但是,读取“f”和“列”的第一个文件根本不存在此问题,即使仅使用“encoding=utf8”也是如此。两者都是纯文本文件。
所以我有两个问题:
在下面的代码中,rel_column 是一个字符串,'id_map' 是一个 python 字典,它有 220 万个键值对。
if rel_column in id_map:
node_ids = id_map[rel_column]
Run Code Online (Sandbox Code Playgroud)
在调试速度瓶颈问题时,我的同事说这段代码是导致缓慢的原因。他说“if”语句需要 log(n) 时间,但我的印象是,在映射或集合中搜索键时,复杂度是常数时间 O(1)。考虑到字典的总大小只有220万个,这不应该是速度瓶颈。
我很困惑。我的同事说得对吗?
我正在使用此代码将一个字典合并到另一个字典中 - 如果存在键,它应该合并两个字典中的值:
source_dict = defaultdict(set)
target_dict = defaultdict(set)
def merge_dict(source_dict, target_dict):
for source_key in source_dict:
if source_key in target_dict:
target_dict[source_key].update(source_dict[source_key])
else:
target_dict[source_key] = source_dict[source_key]
Run Code Online (Sandbox Code Playgroud)
有没有办法优化merge_dict上面的功能?例如,使其更简洁或更高效?
在搜索框中,用户输入一个词,如“iPhone”,点击“搜索”,系统进行后台搜索,返回“iPhone”的所有信息。最后还通过wordController.related变量输出一个相关的词“iPod”。如果用户点击“iPod”链接,系统需要将iPod作为另一个词进行搜索,并再次返回结果。我的问题是,如何将“iPod”(“相关”变量)作为另一个搜索变量传递并执行后端搜索?这一次,它不是通过 h:inputText 和 h:commandButton,因为它不是用户输入的值。
感谢您的帮助!
<h:form id="wordForm">
<h:panelGrid columns="3">
<h:outputLabel for="word">Enter a word:</h:outputLabel>
<h:inputText id="word"
value="#{wordController.word}" />
<h:message for="word" />
</h:panelGrid>
<h:commandButton id="search" value="Search!"
action="#{wordController.info}" />
</h:form>
<br />
<h:outputText value="#{wordController.wordInfo}"
rendered="#{not empty wordController.wordInfo}" />
<h:link value="#{wordController.related}" />
Run Code Online (Sandbox Code Playgroud) 例如:
d = {'a':'1', 'b':'2', 'c':'3'}
Run Code Online (Sandbox Code Playgroud)
我想将 ds 作为 str 获取:
ds = 'a:1, b:2, c:3'
Run Code Online (Sandbox Code Playgroud)
我的转换功能:
def convert_dict(my_dict):
converted = ''
for key, value in my_dict.items():
converted += key + ':' + value + '?'
return converted[0:-1]
Run Code Online (Sandbox Code Playgroud)
我怀疑应该有更好更简单的方法来做到这一点。
我在 Python 中有一个 OrderedDict,我只想获得第一个键值对。如何获得?例如,要获取前 4 个元素,我执行了以下操作:
subdict = {}
for index, pair in enumerate(my_ordered_dict.items()):
if index < 4:
subdict[pair[0]] = pair[1]
Run Code Online (Sandbox Code Playgroud)
这是这样做的好方法吗?
d = {1:'a', 2:'b'}
#s = '1|a;2|b'
s = ';'.join([str(k)+'|'+d[k] for k in d])
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来进行这种转换?
我有一个带有单词和频率的排序字典:
words = {'dog':8, 'cat':7, 'pig':4 ......}
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方式来选择前 3 个项目?所以它最终是:
words = {'dog':8, 'cat':7, 'pig':4}
Run Code Online (Sandbox Code Playgroud)
我可以设置阈值 k = 3 并执行 for 循环,但是有没有更好的方法来做到这一点?
my_dict = {'a':'1', 'b':2, 'c':3}
my_list = ['a','b','d']
for element in my_list:
if element not in my_dict:
my_dict[element] =1
Run Code Online (Sandbox Code Playgroud)
这个for循环可以用Python中的一行代码代替吗?我无法使用字典或列表理解来做到这一点。
import datetime
from datetime import date
def get_one_week():
global date
seven_dates = []
date = date.today()
for i in range(7):
date += datetime.timedelta(days=-1)
date_str = date.strftime('%Y%m%d')
seven_dates.append(date_str)
return seven_dates
print(get_one_week())
Run Code Online (Sandbox Code Playgroud)
这将打印出:
['20220901', '20220831', '20220830', '20220829', '20220828', '20220827', '20220826']
Run Code Online (Sandbox Code Playgroud)
我的问题是,“日期”和“日期时间”都是导入变量,但为什么我对“日期”使用全局声明,而不对“日期时间”变量使用全局声明?
python ×10
dictionary ×2
defaultdict ×1
jsf ×1
list ×1
python-3.x ×1
set ×1
sorting ×1
utf-8 ×1