我试图将我的元组列表转换为包含该位置值的dict,并加入列表中。 dict
做了我想要的,除了它删除了重复,这是我不想要的!
以下是发生的事情:
>>> vals
[(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
>>> dict(vals)
{8: u'1', 5: u'3'}
这就是我想要发生的事情
>>> vals
[(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
>>> foo(vals)
{8: [u'1',u'1'], 5: [u'3',u'3']}
是否有其他python函数(在上述情况下为foo
)才能执行此操作?
答案 0 :(得分:4)
使用setdefault
:
{
title: 'Event',
start: '2016-03-26T11:00:00',
end: '2016-03-26T12:00:00',
},
],
eventClick: function(event) {
console.log(event)
// alert(event.start.format('MMMM Do YYYY'))
var start = event.start.format('MMMM Do YYYY'),
end = event.end.format('MMMM Do YYYY'),
html = '<p>Starts: ' + start + '<p>';
html += '<p>Ends: ' + end + '<p>';
var modal = $("#modal");
modal.find(".modal-title").html(event.title);
modal.find('.modal-body').html(html)
modal.modal();
}
});
});
});//]]>
</script>
<script type="text/javascript">
$(document).ready(function() {
// Generate a simple captcha
function randomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
function generateCaptcha() {
$('#captchaOperation').html([randomNumber(1, 100), '+', randomNumber(1, 200), '='].join(' '));
}
generateCaptcha();
$('#contactForm')
.formValidation({
})
.on('success.form.fv', function(e) {
// Prevent default form submission
e.preventDefault();
// Change these values to match with your application
var MANDRILL_API_KEY = 'YOUR-MANDRILL-API-KEY',
EMAIL_SUBJECT = 'Find Volunteerships - Sign Up Confirmation ',
var $form = $(e.target),
// Generate a message based on submitted form data
body = [
'<strong>Name:</strong> ' + $form.find('[name="firstName"]').val() + ' ' + $form.find('[name="lastName"]').val(),
'<strong>School</strong> ' + ($form.find('[name="school"]').val() || 'n/a'),
'',
'<strong>Message:</strong> ',
$form.find('[name="school"]').val()
].join('<br/>');
// Send the message
$.ajax({
type: 'POST',
url: 'http://mandrillapp.com/api/1.0/messages/send.json',
contentType: 'text/plain',
dataType: 'json',
data: {
key: MANDRILL_API_KEY,
message: {
from_name: $form.find('[name="fullName"]').val(),
from_email: $form.find('[name="email"]').val(),
to: [
{
email: $form.find('[name="email"]').val(),
name: $form.find('[name="fullName"]').val(),
'type': 'to'
}
],
auto_text: true,
subject: EMAIL_SUBJECT,
html: body
}
}
}).done(function(response) {
// Clear the form
$form.formValidation('resetForm', true);
// Regenerate the captcha
.on('err.form.fv', function(e) {
// Regenerate the captcha
generateCaptcha();
});
// Show the message
response.status === 'error'
? $('#alertContainer')
.removeClass('alert-success')
.addClass('alert-warning')
.html('Sorry, cannot register the sign up')
.show()
: $('#alertContainer')
.removeClass('alert-warning')
.addClass('alert-success')
.html('Your sign up has been successfully registered')
.show();
}).fail(function(jqXHR, textStatus, errorThrown) {
$('#alertContainer')
.removeClass('alert-success')
.addClass('alert-warning')
.html('Sorry, cannot register the sign up')
.show();
});
(使用def foo(some_list):
result = {}
for k, v in some_list:
result.setdefault(k, []).append(v)
return result
比使用setdefault
效率更高,因为我们会在附近进行追加)
答案 1 :(得分:2)
我建议使用流行的模块集合和 defaultdict 。
from collections import defaultdict
vals = [(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
def foo(lst):
d = defaultdict(list)
for key, value in lst:
d[key].append(value)
return d
print foo(vals)
# defaultdict(<type 'list'>, {8: [u'1', u'1'], 5: [u'3', u'3']})
答案 2 :(得分:1)
你可以这样做:
def foo(vals):
x = {}
for k, v in vals:
x[k] = x.get(k, []) + [v]
return x
我使用x.get(k, [])
,以便如果k
已经在x
中,我们会在其末尾添加put v
,但如果不是,我们会将v
放在[]
的末尾,并将其用于x[k]
。更长,但更快的方法是首先检查是否存在,如果存在,则附加到它。这更快,因为我们每次都不创建新列表:
def foo(vals):
x = {}
for k, v in vals:
if k in x:
x[k].append(v)
else:
x[k] = [v]
您也可以使用try-except
块执行此操作:
def foo(vals):
x = {}
for k, v in vals:
try:
x[k].append(v)
except KeyError:
x[k] = [v]
答案 3 :(得分:1)
dict
的值应该是列表,您在密钥不存在时分配,如果密钥已存在,则附加到该列表。
def foo(some_list):
result = {}
for k,v in some_list:
if k in result:
result[k].append(v)
else:
result[k] = [ v ]
return result
答案 4 :(得分:1)
您还可以使用defaultdict
:
from collections import defaultdict
vals = [(5, u'3'), (5, u'3'), (8, u'1'), (8, u'1')]
d = defaultdict(list)
for key, value in vals:
d[key].append(value)